Board logo

标题: [其他] 批处理if是怎样判断汉字字符的 [打印本页]

作者: aaqqi1111    时间: 2008-8-14 09:24     标题: 批处理if是怎样判断汉字字符的

在本月精华中if怎样判断汉字字符的文章中 有个版主写了一段代码是
for %%i in (a b c d e f g h i j k l n m o p q r s t u v w x y z) do if /i "%%i" equ "%a%" echo %a%是字母
for %%i in (0 1 2 3 4 5 6 7 8 9) do if "%%i" equ "%a%" echo %a%是数字
但我试验了下 结果显示
for %i in (a b c d e f g h i j k l n m o p q r s t u v w x y z) do if /i "%i" equ "" echo  是字母
if /l "a" EQU "" echo  是字母
if /l "b" EQU "" echo  是字母




for %i in (0 1 2 3 4 5 6 7 8 9) do if "%i" equ "" echo  是数字
if  "0" EQU "" echo  是数字
if  "1" EQU "" echo  是数字



为什么"a"("0")EQU ""  echo  是字母(是数字), 中不显示a 我认为是在整个代码前没有给a赋值以至于程序在执行版主的代码之前已经给a自动赋了个空值,所以在显示结果中a就以空值的形式出现,所以就会出现结果中的样子,但如果在代码前用set给a赋个值 那结果中a就会以赋的那个值出现 比如:
set a=b
for %%i in (a b c d e f g h i j k l n m o p q r s t u v w x y z) do if /i "%%i" equ "%a%" echo %a%是字母
for %%i in (0 1 2 3 4 5 6 7 8 9) do if "%%i" equ "%a%" echo %a%是数字
那结果就是
for %i in (a b c d e f g h i j k l n m o p q r s t u v w x y z) do if /i "%i" equ "b" echo  b是字母
if /l "a" EQU "b" echo  b是字母
if /l "b" EQU "b" echo  b是字母




for %i in (0 1 2 3 4 5 6 7 8 9) do if "%i" equ "b" echo  b是数字
if  "0" EQU "b" echo  b是数字
if  "1" EQU "b" echo  b是数字
这只是本人的见解 可能不对 大家不要骂我 如果不对的话请大虾们给出个正确解释
。^_^


作者: pusofalse    时间: 2008-8-14 09:48

我感觉没错啊。
for %i in (a b c d e f g h i j k l n m o p q r s t u v w x y z) do if /i "%i" equ "" echo  是字母
if /l "a" EQU "" echo  是字母
if /l "b" EQU "" echo  是字母
。。。。
这只是处理过程,而不是结果。
---------------------------------------------------------------
for %i in (a b c d e f g h i j k l n m o p q r s t u v w x y z) do if /i "%i" equ "b" echo  b是字母
if /l "a" EQU "b" echo  b是字母
if /l "b" EQU "b" echo  b是字母
这里的if /l "a" equ "b" echo b是字母。
a怎么可能等于b呢。
作者: aaqqi1111    时间: 2008-8-14 10:34

我明白你的意思了 那是有意让结果那样显示的 OK! 知道了 还有你说的a如何等于b  ?你看清楚 我的代码前还有个set a=b 这样该明白了吧  ^_^
作者: batman    时间: 2008-8-14 10:44

请运行以下代码:
  1. @echo off
  2. set "str=b a t h o m e 1 2 3 4 5"
  3. set "code=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  4. for %%a in (%str%) do (
  5.       for %%i in (%code%) do if /i "%%a" equ "%%i" echo %%a是字母
  6. )
  7. pause>nul
复制代码
ps:敢于怀疑是好的,呵呵。

[ 本帖最后由 batman 于 2008-8-14 10:47 编辑 ]
作者: aaqqi1111    时间: 2008-8-14 10:57

^_^  我又测试了一下本月精华的代码发现
for  %%i in (a b c d e f g h i j k l n m o p q r s t u v w x y z) do if
/i "%%i" == "%a%" echo  %a%是字母
for %%i in (0 1 2 3 4 5 6 7 8 9) do if "%%i" equ "%a%" echo %a%是数字
pause
如果把“echo %a%是字母(是数字)”换个行写而不是接着"%%i" == "%a%" 后面写,如果这样的话运行代码时黑框框会一闪而过 而不是执行pause的动作 是不是代码这样一改就错了  为什么呢~~~
作者: pusofalse    时间: 2008-8-14 12:39

原帖由 aaqqi1111 于 2008-8-14 10:34 发表
我明白你的意思了 那是有意让结果那样显示的 OK! 知道了 还有你说的a如何等于b  ?你看清楚 我的代码前还有个set a=b 这样该明白了吧  ^_^

a永远不可能等于b。。。
而是变量a的值等于b
a、b都是常量,%a%、b一个是变量,一个是常量。请理解常量与变量的概念。

你楼上说的现象是严重的语法错误、应该是:
do (
...
... ...
)
或全部写一行上。
作者: aaqqi1111    时间: 2008-8-15 00:01

哦 知道了 谢谢了




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2