windows批處理中if語句的用法詳解
if
if是宇宙通用的條件選擇語句標識,在批處理指令中也不例外。但和其他語言不同之處在于,批處理中的if有一個not開關(guān),即if XXX表示xxx為真時執(zhí)行后續(xù)語句,if not XXX表示XXX為假時執(zhí)行后續(xù)語句。
從判斷內(nèi)容的角度來說,if提供了三種類型的判斷,分別是數(shù)字、字符串和文件路徑,下面做一個批處理文件,統(tǒng)一演示一下
:: iftest.bat @echo off dir test.txt if errorlevel 1 (echo error) if a==a (echo a==a) if exist iftest.bat (echo iftest.bat exist)
結(jié)果如下
>iftest.bat
。。。
找不到文件
error
a==a
iftest.bat exist
首先,if errorlevel 1,表示如果上一條命令的錯誤碼大于1,那么就執(zhí)行后續(xù)代碼。上一條代碼是dir test.txt,這個文件是不存在的,所以執(zhí)行結(jié)果是找不到文件,同時系統(tǒng)錯誤碼也變成了1。在這種情況下,if errorlevel 1判定為真,執(zhí)行后面的echo error語句。
第二條沒什么好說的,判斷兩個字符串是否相等,很顯然相等。
第三條其實也沒什么好說的,判斷iftest.bat是否存在,我們創(chuàng)建的這個腳本就是iftest.bat,這個文件顯然是存在的。
分析這三條代碼可以發(fā)現(xiàn),if后面緊跟著要執(zhí)行的命令,是用小括號括起來的,這一點和許多編程語言不同。如果執(zhí)行的語句只有一行,那么這個括號可以省略,否則就必須帶上,而且括號(和條件之間必須有空格。
有一些奇葩的dos指令,需要在換行時才能生效,比如del,這種情況下代碼必須換行。
擴展命令
上面這三種基礎(chǔ)指令,其實很弱小,甚至無法比較兩個數(shù)字。所以windows分別為其提供了擴展功能,對應(yīng)指令如下:
原生 | 擴展 | 說明 |
---|---|---|
if errorlevel xxx | if cmdextversion xxx | 判斷系統(tǒng)錯誤碼 |
if a==b | if a op b | 字符串或者數(shù)值比較,op包含多種運算符 |
if exist xxx | if defined xxx | 擴展指令還可以檢查變量是否存在 |
其中,op的可用運算符包括
op | 說明 | op | 說明 |
---|---|---|---|
EQU | 等于 | NEQ | 不等于 |
LSS | 小于 | LEQ | 小于或等于 |
GTR | 大于 | GEQ | 大于或等于 |
如果是兩個數(shù)字比較,那么就直接比較大?。蝗绻亲址?,那么就根據(jù)ASCII的位置進行比較。并且此時還有一個忽略大小寫開關(guān)/i,選中之后,在比較字符時將忽略大小寫。
:: ifadvanced.bat @echo off dir test.txt if cmdextversion 1 (echo error) if 3 LSS 4 (echo "3<4") set a=5 if defined a (echo a=%a%)
運行結(jié)果如下
>ifadvanced.bat
找不到文件
error
"3<4"
a=5
else
批處理中的else,或者else if有很多說道,比如必須和上一個if同行,如果if中的命令是多行的,那么就必須和if的尾括號同行,否則就不會被執(zhí)行。
:: ifelse.bat @echo off if %1==1 ( goto :a )else if %1==2 ( goto :b )else ( goto :c ) :a echo you inputted 1 goto :eof :b echo you inputted 2 goto :eof :c echo you didn't input 1 or 2 goto :eof
運行結(jié)果如下
>iftest 1
you inputted 1
>iftest 2
you inputted 2
>iftest 5
you didn't input 1 or 2
到此這篇關(guān)于windows批處理中if語句的用法詳解的文章就介紹到這了,更多相關(guān)批處理if語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!