1、判斷驅(qū)動(dòng)器、文件或文件夾是否存在,用 if exist 語句;
2、判斷某兩個(gè)字符串是否相等,用 if "字符串1"=="字符串2" 語句;
3、判斷某兩個(gè)數(shù)值是否相等,用 if 數(shù)值1 equ 數(shù)值2 語句;
4、判斷某個(gè)變量是否已經(jīng)被賦值,用 if defined str 語句;
if語句的完整格式是這樣的:if 條件表達(dá)式 (語句1) else (語句2),它的含義是:如果條件表達(dá)式成立,那么,就執(zhí)行語句1,否則,將執(zhí)行語句2。
對(duì)于以上四種情形,可以分別使用如下代碼:
1、if exist d:\test.txt (echo D盤下有test.txt存在) else (echo D盤下不存在test.txt)
2、if "abc"=="xyz" (echo 字符串a(chǎn)bc等于字符串xyz) else (echo 字符串a(chǎn)bc不等于字符串xyz)
3、if 1 equ 2 (echo 1等于2) else (echo 1不等于2)
4、if defined str (echo 變量str已經(jīng)被賦值,其值為%str%) else (echo 變量str的值為空)
判斷字符串是否相等的時(shí)候,if會(huì)區(qū)分大小寫,比如,單純的if語句會(huì)認(rèn)為字符串a(chǎn)bc和字符串Abc不相同,若不想?yún)^(qū)分大小寫,則需要添加 /i 開關(guān),使用 if /i "字符串1"=="字符串2" 的格式;另外,等于符號(hào)是連續(xù)的"=="而非單獨(dú)的"="。
判斷兩個(gè)數(shù)值之間的大小關(guān)系,除了等于用equ之外,還有其他的關(guān)系符號(hào),所有適用于if語句的關(guān)系符號(hào)見下表:
中文含義 關(guān)系符 英文解釋
等于 equ equal
大于 gtr greater than
大于或等于 geq greater than or equal
小于 lss less than
小于或等于 leq less than or equal
不等于 neq no equal
if語句還有一個(gè)精簡(jiǎn)格式:if 條件表達(dá)式 語句,它的含義是:如果條件表達(dá)式成立,將執(zhí)行語句,否則,什么也不做。
學(xué)習(xí)if條件語句
學(xué)習(xí)要點(diǎn):
5種if語句的基本語法:
1。判斷兩個(gè)字符串是否相等,if "字符串1"=="字符串2" command 語句;
2。判斷兩個(gè)數(shù)值是否相等,if 數(shù)值1 equ 數(shù)值2 command 語句;
3。判斷判斷驅(qū)動(dòng)器,文件或文件夾是否存在,if exist filename command 語句;
4。判斷變量是否已經(jīng)定義,if defined 變量 command 語句;
5。判斷上個(gè)命令的返回值,if errorlevel 數(shù)值 command 語句。
------------------------------------------------------------------------------------------------------
1。判斷兩個(gè)字符串是否相等,if"字符串1"=="字符串2" command 語句
注意:在"字符串1"=="字符串2"中,是兩個(gè)連續(xù)的"="
例1
@echo off
set /p var1=請(qǐng)輸入第一個(gè)比較的字符:
set /p var2=請(qǐng)輸入第二個(gè)比軟的字符:
if "%var1%"=="%var2%" (echo 輸入的兩個(gè)字符相同) else echo 輸入的兩個(gè)字符不相同
pause
執(zhí)行后會(huì)要求你輸入兩個(gè)字符串,然后批處理判斷它倆是否相同。在判斷字符串是否相等的時(shí)候,if是會(huì)區(qū)分大小寫
的,請(qǐng)看,
例2
@echo off
if "a"=="A" (echo 輸入的兩個(gè)字符相同) else echo 輸入的兩個(gè)字符不相同
pause
執(zhí)行后會(huì)顯示:輸入的兩個(gè)字符不相同
如果我們不想讓它區(qū)分大小寫,則可以加上/i 參數(shù)。再看下面這個(gè)例子,
例3
@echo off
if /i "a"=="A" (echo 輸入的兩個(gè)字符相同) else echo 輸入的兩個(gè)字符不相同
pause
這次執(zhí)行后會(huì)顯示:輸入的兩個(gè)字符相同
------------------------------------------------------------------------------------------------------
2。判斷兩個(gè)數(shù)值是否相等,if 數(shù)值1 equ 數(shù)值2 command 語句
語句中的equ 表示相等的意思,判斷兩個(gè)數(shù)值之間的大小關(guān)系還有以下關(guān)系符號(hào):
中文含義 關(guān)系符 英文解釋
等于 equ equal
大于 gtr greater than
大于或等于 geq greater than or equal
小于 lss less than
小于或等于 leq less than or equal
不等于 neq no equal
我們還是來看個(gè)例子,
例4
@echo off
set /p var=請(qǐng)輸入一個(gè)數(shù)字:
if %var% geq 10 (echo 此數(shù)大于或等于10) else echo 此數(shù)小于10
pause
注意哦,批處理中的大于號(hào),小于號(hào),等于號(hào)等等都不能用:“>” “” “=” 這些符號(hào),而要用像"gtr"這類
的。
☆注意:if 比較字符串與比較數(shù)字 之間的區(qū)別,它們的區(qū)別體現(xiàn)在引號(hào)""上面,請(qǐng)看下面的例子
【example 1】
@echo off
if "12" lss "4" (echo 12竟然小于4哦?) else echo 12當(dāng)然不會(huì)小于4的!
pause
執(zhí)行的結(jié)果是:12竟然小于4哦?
【example 2】
@echo off
if 12 lss 4 (echo 12竟然小于4哦?) else echo 12當(dāng)然不會(huì)小于4的!
Pause
執(zhí)行的結(jié)果是:12當(dāng)然不會(huì)小于4的!
為什么【example 1】中加了雙引號(hào)""會(huì)出錯(cuò)呢?
原因如下:
如果要比較的兩個(gè)元素加了雙引號(hào)"",那么會(huì)被當(dāng)成是字符的比較。兩個(gè)元素作比較的流程是:先比較兩個(gè)元素
的首位,如果首位相同,再比較第二位,如果第二位相同,再比較第三位。。。依此,在【example 1】if "12" lss
"4" 語句中,實(shí)質(zhì)是1與4的比較,1當(dāng)然小于4,所以執(zhí)行了后面的命令:echo 12竟然小于4哦?
☆建議:如果是字符串的比較就使用雙引號(hào)"" 是數(shù)字的比較就不用雙引號(hào)了!
------------------------------------------------------------------------------------------------------
3。判斷判斷驅(qū)動(dòng)器,文件或文件夾是否存在,if exist filename command 語句
我們來瞧瞧這個(gè)判斷驅(qū)動(dòng)器,文件或者文件夾是否存在的語句,這里if exist filename 是表示:存在 filename的
意思。
例5
@echo off
if exist "e:" (echo e盤存在) else echo e盤不存在
pause>nul
這里是判斷e: 是否存在!
例6
@echo off
if exist d:\123.bat (echo 123.bat文件存在!) else echo 123.bat文件不存在!
pause
這個(gè)例子是用來判斷123.bat文件是否存在的,但并不嚴(yán)謹(jǐn)!如果123.bat是一個(gè)文件夾而不是一個(gè)文件時(shí),上面的判
斷就不行了!那么如何判斷指定的文件123.txt是否存在?請(qǐng)看:
@echo off
dir /a-d d:\123.bat >nul 2>nul
if %errorlevel%==0 (echo 123.bat文件存在!) else echo 123.bat文件不存在!
Pause
先用dir的/a-d參數(shù)去除123.bat的目錄屬性,指定說明要搜索的123.bat是文件而不是文件夾,并把結(jié)果(包括正確
和錯(cuò)誤)屏蔽(>nul 2>nul),如果dir找到了文件123.bat,那么其errorlevel值(dir命令的退出編碼)會(huì)被設(shè)為0,否
則為1則是沒有此文件。當(dāng)然也可以用||和來判斷。關(guān)于為什么要用if %errorlevel%==0 而不用if errorlevel 0
呢?在后面if errorlevel中會(huì)有說明!
例7
@echo off
if exist test\ (echo test 是文件夾) else echo test 是文件
pause
這里是判斷文件夾是否存在。對(duì)于文件夾存在的判斷,我們不可以用以下兩種寫法:
第①種
@echo off
if exist test\. (echo test 是文件夾) else echo test 是文件
pause
第②種
@echo off
if exist test\nul (echo test 是文件夾) else echo test 是文件
pause
4。判斷變量是否已經(jīng)定義,if defined 變量 command 語句
這是一個(gè)判斷變量是否已被定義的語句,我們還是先看例子,
例8
@echo off
if defined a (echo 變量 a 已定義) else (echo 變量 a 沒有被定義)
pause
執(zhí)行后顯示:變量 a 沒有被定義
例9
@echo off
set a=
if defined a (echo 變量 a 已定義) else (echo 變量 a 沒有被定義)
pause
執(zhí)行后顯示:變量 a 沒有被定義
注意:set a=這后面是沒有空格的。
例10
@echo off
set a=10
if defined a (echo 變量 a 已定義) else (echo 變量 a 沒有被定義)
pause
執(zhí)行后顯示:變量 a 已定義
看了上面三個(gè)例子,你應(yīng)該發(fā)現(xiàn)點(diǎn)什么了吧?現(xiàn)在我們應(yīng)該知道了:當(dāng)變量不存在或是值為空時(shí),變量則為未定
義。
當(dāng)我們用if defined 變量 command 語句判斷變量是否被定義時(shí),請(qǐng)注意 變量 為不使用引導(dǎo)符號(hào)%的變量名,不
能用寫為%變量%,否則出錯(cuò)。
大家來試一下下面的這兩個(gè)例子,
例11
@echo off
set var1=5
if defined var1 (echo 變量var1已定義) else (echo 變量var1沒有被定義)
set /p var2=請(qǐng)輸入一個(gè)數(shù)字:
if defined %var2% (echo 變量var2已定義) else (echo 變量var2沒有被定義)
pause
例12
@echo off
set var1=5
if defined var1 (echo 變量var1已定義) else (echo 變量var1沒有被定義)
set /p var2=請(qǐng)輸入一個(gè)數(shù)字:
if defined var2 (echo 變量var2已定義) else (echo 變量var2沒有被定義)
pause
注意例11和例12哦:一個(gè)是%var2%而另一個(gè)是var2
5。判斷上個(gè)命令的反回值,if errorlevel 數(shù)值 command 語句
這個(gè)語句是用于判斷上一個(gè)命令執(zhí)行的返回值errorlevel,我們還是先來看看例子,
例13
@echo off
net user
if %errorlevel% == 0 (echo net user 命令執(zhí)行成功) else (echo net user 命令執(zhí)行失敗)
Pause
注意:%errorlevel% 這是個(gè)系統(tǒng)變量,所以用兩個(gè)%括起來,這里的==為兩個(gè)連續(xù)的=
也許有些朋友說我上面的例子是不是寫錯(cuò)了?按照語法應(yīng)該寫成“if errorlevel 0”才對(duì)的呀。
如果你是這樣用的話,那你就錯(cuò)了,還真不信呀?OK,我們來設(shè)計(jì)個(gè)實(shí)驗(yàn)看看
例14
@echo off
set /p input=請(qǐng)輸入任意一條命令:
if errorlevel 0 (echo %input% 命令執(zhí)行成功) else (echo %input% 命令執(zhí)行失敗)
pause
用這種語法,不管你前面的命令,是否執(zhí)行成功,它都會(huì)認(rèn)為命令成功了。何解?
if errorlevel 語句的特點(diǎn):
當(dāng)使用 if errorlevel 0 cmmand 句式時(shí),它的含義是:如果返回的錯(cuò)誤碼值大于或等于0 的時(shí)候,將執(zhí)行cmmand
操作;
當(dāng)使用 if %errorlevel%==0 cmmand 句式時(shí),它含義是:如果返回的錯(cuò)誤碼值等于0 的時(shí)候,將執(zhí)行cmmand操作。
一般上一條命令的執(zhí)行結(jié)果返回的值只有兩個(gè),"成功"用0 表示 "失敗"用 1 表示,實(shí)際上,errorlevel 返回值可
以在0~255 之間,
例如xcopy 默認(rèn)的errorlevel 值就有5 個(gè),分別表示5 種執(zhí)行狀態(tài):
0復(fù)制文件成功
1 未找到復(fù)制文件
2 用戶通過CTRL C 終止了xcopy操作
4 出現(xiàn)了初始化錯(cuò)誤
5 出現(xiàn)了磁盤寫入錯(cuò)誤
對(duì)于if 條件語句,常用的也就上面那5條吧,下面我們來看一下它的兩種格式:
if條件語句的完整格式是:if 條件表達(dá)式 (語句1) else (語句2)
它的含義是:如果 條件表達(dá)式 成立,就執(zhí)行 語句1,否則,將執(zhí)行 語句2。? else后的 語句2 也可以不用括號(hào)括
起。
if條件語句的簡(jiǎn)單格式是:if 條件表達(dá)式 (語句)
它的含義是:如果 條件表達(dá)式 成立,將執(zhí)行 語句,否則,什么都不做。條件表達(dá)式后的 語句 也可以不用括號(hào)括
起。
例15
@echo off
if exist "d:\123.txt" (del "d:\123.txt")
pause
你也可以寫成下面這樣
例16
@echo off
if exist "d:\123.txt" del "d:\123.txt"
pause
補(bǔ)充1:if not 語句
對(duì)于if 語句前面的5種基本語法,都可以加上not參數(shù),如
1。if not "字符串1"=="字符串2" command 語句;
2。if not數(shù)值1 equ 數(shù)值2 command 語句;
3。If not exist filename command 語句;
4。if not defined 變量 command 語句;
5。if not errorlevel 數(shù)值 command 語句。
在if 條件表達(dá)式 (語句) 語句,如沒有not參數(shù),默認(rèn)是判斷條件成立時(shí),執(zhí)行語句;如有not參數(shù),判斷條件失
敗時(shí),執(zhí)行語句。
我們看一下下面的例子:
例17
@echo off
if exist "c:\" (echo C盤存在) else echo C盤不存在
pause
執(zhí)行后顯示:C盤存在
例18
@echo off
if not exist "c:\" (echo C盤存在) else echo C盤不存在
pause
執(zhí)行后顯示:C盤不存在
不會(huì)吧,例18中執(zhí)行后顯示:C盤不存在,這簡(jiǎn)值是在說瞎話了,那到底是什么回事呢?
if not exist "c:\" (echo C盤存在) else echo C盤不存在
此語句中文意思:如果不存在C:\ 就執(zhí)行顯示C盤存在;否則指的是存在C:\&;就執(zhí)行顯示C盤不存在。
注:if exist 意為如果存在,那么if not exist就是如果不存在
你的C盤當(dāng)然是實(shí)實(shí)在在存在的啦,根椐上面的中文分得知,那執(zhí)行例18后就顯示為:C盤不存在 通過分析例18,你
應(yīng)該明白if語句中not參數(shù)是怎么用了吧!
補(bǔ)充2:IF語句嵌套的寫法,我們先來看看
例1
@echo off
set a=55
if %a% geq 50 (
if %a% geq 80 (
if %a% geq 100 (
echo a大于等于100
) else echo a小于100
) else echo a小于80
) else echo a小于50
pause
這是一種比較規(guī)范的寫法,那這種寫法是怎樣寫的呢?那我們一步步的來:
第一步:
if %a% geq 50 ( ) else echo a小于50
第二步:在第一步geq 50 后面的括號(hào)()里按兩下回車,主要是空兩行出來。
if %a% geq 50 (
if %a% geq 80 ( )else echo小于80
) else echo a小于50
第三步:在第二步geq 80 后面的括號(hào)()里按兩下回車,主要是空兩行出來。
if %a% geq 50 (
if %a% geq 80 (
if %a% geq 100 ( ) else echo a小于100
)else echo小于80
) else echo a小于50
第四步:在第三步geq 100 后面的括號(hào)()里按兩下回車,主要是空兩行出來。
if %a% geq 50 (
if %a% geq 80 (
if %a% geq 100 (
echo a大于等于100
) else echo a小于100
)else echo小于80
) else echo a小于50
上面的代碼中,if %a% 和 )else 要適當(dāng)?shù)目s進(jìn),以達(dá)到寫書清晰!
您可能感興趣的文章:- cmd if條件 條件判斷
- bat批處理 if 命令示例詳解
- bat If 命令常用判斷介紹
- bat中errorlevel與%errorlevel%的區(qū)別
- dos中一些常用命令的errorlevel返回值
- IF-ERRORLEVEL使用方法