在批处理中我们经常要对字符进行判断,判断字符是数字还是字母还是汉字还是特殊字符而对数字
和字母的判断,我们可以使用findstr+管道来进行:- echo %a%|findstr "[^0-9]">nul||echo %a%是数字
- echo %a%|findstr /i "[^a-z]">nul||echo %a%是字母
复制代码 如是对单个字符进行判断,我们可以用for+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%是数字
复制代码 而对%、!、#、<、>、*等特殊字符的判断,则牵涉到批处理中对特殊字符的处理,由于情况复杂,
我们就姑且不在这里谈论了,如大家有兴趣,可以到高手挑战区的那道文件重命名贴跟贴讨论。
那么对汉字的判断如何进行呢?个人喜欢用如下代码:- if /i "%a%" gtr "z" echo %a%是汉字
复制代码 因为我认为在if /i "%a%" gtr "z"语式中,if是把%a%和z都当做unicode字符来比较,如下:- if "5" gtr "12" (echo 5^>12) else (echo 5^<12)
复制代码 大家是不是想结果是5<12,其实结果是5>12,为什么呢,因为当比较的双方都加上双引号后,if将
会对比较的双方进行逐字符比较,首先比较第一个字符,如相同则比较第二个字符,如相同再比较
第三个字符,以此类推一直到比较出大小或者到最后一个字符输出比较结果,而5和12第一个字符分
别是5和1,而5>1,所以便有了以上的5>12的结果。那么我们讨论的问题就出现了:
问题一 if /i "a" gtr "b" 是不是就是把a和b当做unicode字符来比较?
问题二 如以上的答案是“是”,那么if /i "%a%" gtr "z"是不是就能判定%a%是汉字呢?
|