DOS批處理命令-if語句
IF語句是批處理中執行的條件分歧處理。
批處理中,IF分歧的寫法有好幾種,接下來,我們來一個一個的分析IF語法的結構。
1、IF [NOT] ERRORLEVEL 番號 批處理命令
當ERRORLEVEL的值大於等於指定的番號的值時,執行指定的批處理命令。
@echo off call :called0 IF ERRORLEVEL 100 ( echo ERRORLEVEL = %ERRORLEVEL% ) call :called1 IF ERRORLEVEL 100 ( echo ERRORLEVEL = %ERRORLEVEL% ) call :called2 IF ERRORLEVEL 100 ( echo ERRORLEVEL = %ERRORLEVEL% ) exit /b 200 :called0 SETLOCAL echo called0 exit /b 99 ENDLOCAL :called1 SETLOCAL echo called1 exit /b 100 ENDLOCAL :called2 SETLOCAL echo called2 exit /b 101 ENDLOCAL
運行的結果爲:
C:\Users\liuhongying>F:\tmp\a.bat
called0
called1
ERRORLEVEL = 100
called2
ERRORLEVEL = 101
發現,在返回值跟100比的時候,只有等於100和大於100的時候,執行到了下面的批處理命令,而在99的時候,就沒有執行批處理命令,這個測試你結果,你就應該明白了吧!
2、IF [NOT] 文字列1==文字列2 批處理命令
這個判斷是比較文字列1和文字列2是不是相等,如果是變量,就要用%來取出變量的值來比較。
IF [/I] [NOT] 文字列1==文字列2 批處理命令
有一個控制開關,/I,是控制比較的時候是不是忽略大小寫。如果有/I這個開關存在的時候,比較的時候就會忽略大小寫去比較。
看看下面這個例子,你就 應該全部明白了。
@echo off IF abcdef==abcdef ( echo abcdef==abcdef ) IF AbCdEF==abcdef ( echo AbCdEF==abcdef ) IF /I ABCDEF==abcdef ( echo ABCDEF==abcdef ) IF /I AbCdEF==abcdef ( echo AbCdEF==abcdef )
F:\tmp>a.bat
abcdef==abcdef
ABCDEF==abcdef
AbCdEF==abcdef
3、IF [NOT] EXIST 文件名 批處理命令
幫助上面寫的是判斷文件名是否存在,其實,這個判斷方法既可以判斷文件是否存在,又可以判斷路徑是不是存在。
執行結果:
F:\tmp>a.bat
EXIST:F:\tmp\a.bat
EXIST:F:\tmp
4、IF [/I] 文字列1 比較演算子 文字列2 批處理命令
對文字列1和文字列2按照比較演算子進行比較,比較結果爲真的時候,就執行批處理命令指定的處理。
下面對幾種比較演算子進行進行介紹。
EQU - 等於(等しい)
NEQ - 不等於(等しくない)
LSS - 小於(より小さい)
LEQ - 小於等於(以下)
GTR - 大於(より大きい)
GEQ - 大於等於(以上)
下邊這個例子,對這幾個判斷符進行解說
@echo off echo EQU IF a EQU a ( echo a EQU a ) IF a EQU b ( echo a EQU b ) echo NEQ IF a NEQ a ( echo a NEQ a ) IF a NEQ b ( echo a NEQ b ) echo LSS IF a LSS a ( echo a LSS a ) IF a LSS b ( echo a LSS b ) IF b LSS a ( echo b LSS a ) echo LEQ IF a LEQ a ( echo a LEQ a ) IF a LEQ b ( echo a LEQ b ) IF b LEQ a ( echo b LEQ a ) echo GTR IF a GTR a ( echo a GTR a ) IF a GTR b ( echo a GTR b ) IF b GTR a ( echo b GTR a ) echo GEQ IF a GEQ a ( echo a GEQ a ) IF a GEQ b ( echo a GEQ b ) IF b GEQ a ( echo b GEQ a )
運行結果爲:
F:\tmp>a.bat
EQU
a EQU a
NEQ
a NEQ b
LSS
a LSS b
LEQ
a LEQ a
a LEQ b
GTR
b GTR a
GEQ
a GEQ a
b GEQ a
5、IF CMDEXTVERSION 番號 批處理命令
最初的CMDEXTVERSION的值是1,當擴展命令可以使用的時候,CMDEXTVERSION的值就比1大了。
並且,當擴張技能無效的時候,這個表達式命題恆爲假。
更加具體的作用,這裏不去探討了,如果以後有需要,用到了,在去追加吧!
6、IF DEFINED 変數 批處理命令
如果指定的變數定義的時候,就執行批處理命令指定的處理。更加準確的描述應該是,指定的便是的值是空的時候,句執行批處理命令指定的處理。
@echo off set var1=abc set var3= set var4= IF DEFINED var1 ( echo DEFINED var1 ) IF DEFINED var2 ( echo DEFINED var2 ) IF DEFINED var3 ( echo DEFINED var3 ) IF DEFINED var4 ( echo DEFINED var4 )
*var3=後面是沒有設置空格
*var4=後面是設置空格的
運行結果爲:
F:\tmp>a.bat
DEFINED var1
DEFINED var3
PS:以上的語法介紹中,都沒有詳細介紹另個重要點
A:所有加[NOT]的地方,如果加了NOT以後,就將判斷的調節取反。
B:所有的命令都沒有介紹else的語法,所有的IF判斷,都是可以再行後最佳【else 批處理命令】,也就是說,當判斷條件不成立的時候,執行批處理命令指定的處理。
更推薦的寫法是,所有批處理命令都加上小括號,如下述結果
IF 條件 ( 條件爲真的時候的處理 ) else ( 條件爲假的時候的處理 )