
[討論]批處理if命令是怎樣來判別漢字字符的在批處理中我們經常要對字符進行判斷,判斷字符是數字還是字母還是漢字還是特殊字符而對數字和字母的判斷,我們可以使用findstr+管道來進行:
如是對單個字符進行判斷,我們可以用for+if來進行:nclick="copycode($('code0'));">復制代碼
- echo %a%|findstr [^0-9]>nul||echo %a%是數字
- echo %a%|findstr /i [^a-z]>nul||echo %a%是字母
而對%、!、#、<、>、*等特殊字符的判斷,則牽涉到批處理中對特殊字符的處理,由于情況復雜,我們就姑且不在這里談論了,如大家有興趣,可以到高手挑戰區的那道文件重命名貼跟貼討論。那么對漢字的判斷如何進行呢?個人喜歡用如下代碼:nclick="copycode($('code1'));">復制代碼
- 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語式中,if是把%a%和z都當做unicode字符來比較,如下:nclick="copycode($('code2'));">復制代碼
- if /i %a% gtr z echo %a%是漢字
大家是不是想結果是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%是漢字呢?nclick="copycode($('code3'));">復制代碼
- if 5 gtr 12 (echo 5^>12) else (echo 5^<12)

