最近發(fā)現(xiàn)有些朋友一老問IF命令的用法,IF命令個(gè)人覺得很簡單,所以就一直沒把發(fā)放到新手教學(xué)貼里說,現(xiàn)在我給補(bǔ)上一文,希望對(duì)各位"非常BAT的"新手朋友們有所幫助.
現(xiàn)在開始:
在CMD使用IF /?打開IF的系統(tǒng)幫助(自己看我就不全部列出來了),我們會(huì)發(fā)現(xiàn)IF有3種基本的用法!
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
首先來講第一種用法 IF [NOT] ERRORLEVEL number command
這個(gè)用法的基本做用是判斷上一條命令執(zhí)行結(jié)果的代碼,以決定下一個(gè)步驟.
一般上一條命令的執(zhí)行結(jié)果代碼只有兩結(jié)果,"成功"用0表示 "失敗"用1表示.
舉個(gè)例子:
@echo off
net user
IF %ERRORLEVEL% == 0 echo net user 執(zhí)行成功了!
pause
這是個(gè)簡單判斷上條命令是否執(zhí)行成功.
細(xì)心的朋友可能會(huì)發(fā)現(xiàn),這個(gè)用法和幫助里的用法不太一樣,按照幫助里的寫法"IF %ERRORLEVEL% == 0 echo net user 執(zhí)行成功了! "這一句代碼因該寫成:IF ERRORLEVEL 0 echo net user 執(zhí)行成功了!
那為什么我要寫成這樣呢?各位自己把代碼改掉執(zhí)行后,就會(huì)發(fā)現(xiàn)錯(cuò)誤了!用這種語法,不管你的上面的命令是否執(zhí)行成功,他都會(huì)認(rèn)為命令成功了,不知道是BUG還是本人理解錯(cuò)誤...
%ERRORLEVEL% 這是個(gè)系統(tǒng)變量,返回上條命令的執(zhí)行結(jié)果代碼! "成功"用0表示 "失敗"用1表示. 當(dāng)然還有其他參數(shù),用的時(shí)候基本就這兩數(shù)字.
在舉幾個(gè)例子給新手理解
@echo off
net usertest
IF %ERRORLEVEL% == 1 echo net user 執(zhí)行失敗了!
pause
這個(gè)是判斷上一條命令是否執(zhí)行失敗的
@echo off
set /p var=隨便輸入個(gè)命令:
%var%
if %ERRORLEVEL% == 0 goto yes
goto no
:yes
echo !var! 執(zhí)行成功了
pause
exit
:no
echo 基本上執(zhí)行失敗了..
pause
這個(gè)是根據(jù)你輸入的命令,自動(dòng)判斷是成功還是失敗了!
在來一個(gè)簡化版的
@echo off
set /p var=隨便輸入個(gè)命令:
%var%
if %ERRORLEVEL% == 0 (echo %var%執(zhí)行成功了) ELSE echo %var%執(zhí)行失敗了!
pause
else后面寫上執(zhí)行失敗后的操作!
當(dāng)然我門還可以把if else這樣的語句分成幾行寫出來,使他看上去好看點(diǎn)...
@echo off
set /p var=隨便輸入個(gè)命令:
%var%
if %ERRORLEVEL% == 0 (
echo !var! 執(zhí)行成功了
) ELSE (
echo 基本上執(zhí)行失敗了..
)
pause
這里介紹的兩種簡寫對(duì)IF的三種語法都可以套用,不單單是在IF [NOT] ERRORLEVEL number command
這種法上才能用
現(xiàn)在來說第二種用法IF [NOT] string1==string2 command
這個(gè)呢就是用來比較變量或者字符的值是不是相等的.
例子
@echo off
set /p var=請(qǐng)輸入第一個(gè)比較字符:
set /p var2=請(qǐng)輸入第二個(gè)比較字符:
if %var% == %var2% (echo 我們相等) ELSE echo 我們不相等
pause
上面這個(gè)例子可以判斷你輸入的值是不是相等,但是你如果輸入相同的字符,但是如果其中一個(gè)后面打了一個(gè)空格,
這個(gè)例子還是會(huì)認(rèn)為相等,如何讓有空格的輸入不相等呢?我們?cè)诒容^字符上加個(gè)雙引號(hào)就可以了.
@echo off
set /p var=請(qǐng)輸入第一個(gè)比較字符:
set /p var2=請(qǐng)輸入第二個(gè)比較字符(多輸入個(gè)空格試試):
if "%var%" == "%var2%" (echo 我們相等) ELSE echo 我們不相等
pause
第三種用法IF [NOT] EXIST filename command
這個(gè)就是判斷某個(gè)文件或者文件夾是否存在的語法
例子
@echo off
if exist "c:\test" (echo 存在文件) ELSE echo 不存在文件
pause
判斷的文件路徑加引號(hào)是為了防止路徑有空格,如果路徑有空格加個(gè)雙引號(hào)就不會(huì)出現(xiàn)判斷出錯(cuò)了!
這個(gè)語法沒什么太多的用法,基本就這樣了,就不多介紹了.
另外我們看到每條IF用法后都有個(gè)[NOT]語句,這啥意思?其他加上他的話,就表示先判斷我們的條件不成立時(shí),
沒加他默認(rèn)是先判斷條件成立時(shí),比如上面這個(gè)例子
@echo off
if not exist "c:\test" (echo 存在文件) ELSE echo 不存在文件
pause
加個(gè)NOT,執(zhí)行后有什么結(jié)果,如果你的C盤下更本就沒c:\test,他還是會(huì)顯示"存在文件",這就表示了加了NOT就
會(huì)先判斷條件失敗!懂了吧,上面例子改成這樣就正確了!
@echo off
if not exist "c:\test" (echo 不存在文件) ELSE echo 存在文件
pause
另外IF還有一些增強(qiáng)的用法,如下
IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number command
IF DEFINED variable command
后面兩個(gè)用法,我不做介紹,因?yàn)樗麄兒蜕厦娴挠梅ū硎镜囊饬x基本一樣,只簡單說說 IF [/I] string1 compare-op string2 command這個(gè)語句在判斷字符時(shí)不區(qū)分字符的大小寫,看這兩個(gè)例子
@echo off
if a == A (echo 我們相等) ELSE echo 我們不相等
pause
執(zhí)行后會(huì)顯示我們不相等
@echo off
if /i a == A (echo 我們相等) ELSE echo 我們不相等
pause
加上/I不區(qū)分大小寫就相等了!
最后面還有一些用來判斷數(shù)字的符號(hào)
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
我?guī)着e一個(gè)例子,大家都懂?dāng)?shù)學(xué)...不講多了
@echo off
set /p var=請(qǐng)輸入一個(gè)數(shù)字:
if %var% LEQ 4 (echo 我小于等于4) ELSE echo 我不小于等于4
pause