天天看點

3.1 if條件語句

3.1 if條件語句

《批處理入門手冊》

bat腳本如果要寫中文就要以gbk的編碼儲存

指派=,相等==,左右兩邊不要有空格

------------------------------------------------------------------------------------------------------

3.1 學習if條件語句

學習要點:

5種if語句的基本文法:

1。判斷兩個字元串是否相等,if "字元串1"=="字元串2" command 語句;

2。判斷兩個數值是否相等,if 數值1 equ 數值2 command 語句;

3。判斷判斷驅動器,檔案或檔案夾是否存在,if exist filename command 語句;

4。判斷變量是否已經定義,if defined 變量 command 語句;

5。判斷上個指令的傳回值,if errorlevel 數值 command 語句。

1、判斷兩個字元串是否相等

if "字元串1" == "字元串2" command 語句

   注意:在"字元串1"=="字元串2"中,是兩個連續的"="

例1

@echo off

set /p var1=請輸入第一個比較的字元:

set /p var2=請輸入第二個比軟的字元:

if "%var1%"=="%var2%" (echo 輸入的兩個字元相同) else echo 輸入的兩個字元不相同

pause

執行後會要求你輸入兩個字元串,然後批處理判斷它倆是否相同。在判斷字元串是否相等的時候,if是會區分大小寫的,

例2

if "a"=="A" (echo 輸入的兩個字元相同) else echo 輸入的兩個字元不相同

執行後會顯示:輸入的兩個字元不相同

如果我們不想讓它區分大小寫,則可以加上/i 參數。再看下面這個例子,

例3

if /i "a"=="A" (echo 輸入的兩個字元相同) else echo 輸入的兩個字元不相同

這次執行後會顯示:輸入的兩個字元相同

2、判斷兩個數值是否相等

if 數值1 equ 數值2 command 語句

    語句中的equ 表示相等的意思,判斷兩個數值之間的大小關系還有以下關系符号:

中文含義 關系符 英文解釋

等于      equ equal

大于      gtr greater than

大于或等于 geq greater than or equal

小于      lss less than

小于或等于 leq less than or equal

不等于     neq no equal

例4 判斷數值是否相等

@echo off 

set /p var=請輸入一個數字: 

if %var% geq 10 (echo 此數大于或等于10) else echo 此數小于10

注意哦,批進行中的大于号,小于号,等于号等等都不能用:“>” “<” “=” 這些符号,而要用像"gtr"這類的。

☆注意:if 比較字元串與比較數字之間的差別,它們的差別展現在引号""上面,請看下面的例子

【example 1】

if "12" lss "4" (echo 12竟然小于4哦?) else echo 12當然不會小于4的!

執行的結果是:12竟然小于4哦?

【example 2】

if 12 lss 4 (echo 12竟然小于4哦?) else echo 12當然不會小于4的!

Pause

執行的結果是:12當然不會小于4的!

為什麼【example 1】中加了雙引号""會出錯呢?

原因如下:

    如果要比較的兩個元素加了雙引号"",那麼會被當成是字元的比較。兩個元素作比較的流程是:先比較兩個元素的首位,如果首位相同,再比較第二位,如果第二位相同,再比較第三位。。。

    依此,在【example 1】if "12" lss  "4" 語句中,實質是1與4的比較,1當然小于4,是以執行了後面的指令:echo 12竟然小于4哦?

☆建議:如果是字元串的比較就使用雙引号 "" 是數字的比較就不用雙引号了!

3、判斷判斷驅動器

檔案或檔案夾是否存在,if exist filename command 語句

我們來瞧瞧這個判斷驅動器,檔案或者檔案夾是否存在的語句,這裡if exist filename 是表示:存在 filename的意思。

例5 判斷磁盤是否存在

if exist "e:" (echo e盤存在) else echo e盤不存在 

pause>nul

這裡是判斷e: 是否存在!

例6 判斷檔案是否存在

if exist d:\123.bat (echo 123.bat檔案存在!) else echo 123.bat檔案不存在! 

這個例子是用來判斷123.bat檔案是否存在的,但并不嚴謹!如果123.bat是一個檔案夾而不是一個檔案時,上面的判斷就不行了!

那麼如何判斷指定的檔案123.txt是否存在?請看:

dir /a-d d:\123.bat >nul 2>nul

if %errorlevel%==0 (echo 123.bat檔案存在!) else echo 123.bat檔案不存在! 

先用dir的/a-d參數去除123.bat的目錄屬性,指定說明要搜尋的123.bat是檔案而不是檔案夾,并把結果(包括正确和錯誤)屏蔽(>nul 2>nul),如果dir找到了檔案123.bat,那麼其errorlevel值(dir指令的退出編碼)會被設為0,否則為1則是沒有此檔案。

當然也可以用||和&&來判斷。關于為什麼要用if %errorlevel%==0 而不用if errorlevel 0 呢?在後面if errorlevel中會有說明!

例7 判斷是否是檔案夾

if exist test\ (echo test 是檔案夾) else echo test 是檔案

這裡是判斷檔案夾是否存在。對于檔案夾存在的判斷,我們不可以用以下兩種寫法:

第①種

if exist test\. (echo test 是檔案夾) else echo test 是檔案

第②種

if exist test\nul (echo test 是檔案夾) else echo test 是檔案

4、判斷變量是否已經定義

if defined 變量 command 語句

這是一個判斷變量是否已被定義的語句,我們還是先看例子,

例8

if defined a (echo 變量 a 已定義) else (echo 變量 a 沒有被定義)

執行後顯示:變量 a 沒有被定義

例9

set a=

注意:set a=這後面是沒有空格的。

例10

set a=10

執行後顯示:變量 a 已定義

   看了上面三個例子,你應該發現點什麼了吧?現在我們應該知道了,當變量不存在或是值為空時,變量則為未定義。

   當我們用if defined 變量 command 語句判斷變量是否被定義時,請注意變量為不使用引導符号%的變量名,不能用寫為%變量%,否則出錯。

大家來試一下下面的這兩個例子,

例11

set var1=5

if defined var1 (echo 變量var1已定義) else (echo 變量var1沒有被定義)

set /p var2=請輸入一個數字:

if defined %var2% (echo 變量var2已定義) else (echo 變量var2沒有被定義)

例12

if defined var2 (echo 變量var2已定義) else (echo 變量var2沒有被定義)

注意例11和例12哦:一個是%var2%而另一個是var2

5、判斷上個指令的反回值

if errorlevel 數值 command 語句

這個語句是用于判斷上一個指令執行的傳回值errorlevel,我們還是先來看看例子,

例13 

net user 

if %errorlevel% == 0 (echo net user 指令執行成功) else (echo net user 指令執行失敗) 

注意:%errorlevel% 這是個系統變量,是以用兩個%括起來,這裡的==為兩個連續的=,也許有些朋友說我上面的例子是不是寫錯了?按照文法應該寫成“if errorlevel 0”才對的呀。

如果你是這樣用的話,那你就錯了,還真不信呀?OK,我們來設計個實驗看看

例14

set /p input=請輸入任意一條指令: 

if errorlevel 0 (echo %input% 指令執行成功) else (echo %input% 指令執行失敗)

用這種文法,不管你前面的指令,是否執行成功,它都會認為指令成功了。何解?

if errorlevel 語句的特點:

當使用 if errorlevel 0 cmmand 句式時,它的含義是:如果傳回的錯誤碼值大于或等于0 的時候,将執行cmmand操作;

當使用 if %errorlevel%==0 cmmand 句式時,它含義是:如果傳回的錯誤碼值等于0 的時候,将執行cmmand操作。

    一般上一條指令的執行結果傳回的值隻有兩個,"成功"用0 表示 "失敗"用 1 表示,實際上,errorlevel 傳回值可以在0~255 之間,

例如xcopy 預設的errorlevel 值就有5 個,分别表示5 種執行狀态:

0 複制檔案成功 

1 未找到複制檔案 

2 使用者通過CTRL C 終止了xcopy操作 

4 出現了初始化錯誤  

5 出現了磁盤寫入錯誤

   對于if 條件語句,常用的也就上面那5條吧,下面我們來看一下它的兩種格式:

if條件語句的完整格式是:

    if 條件表達式 (語句1) else (語句2) 

    它的含義是:如果 條件表達式 成立,就執行 語句1,否則,将執行 語句2。? else後的 語句2 也可以不用括号括起。

if條件語句的簡單格式是:

    if 條件表達式 (語句) 

    它的含義是:如果 條件表達式 成立,将執行 語句,否則,什麼都不做。條件表達式後的 語句 也可以不用括号括起。

例15

if exist "d:\123.txt" (del "d:\123.txt")

你也可以寫成下面這樣

例16

if exist "d:\123.txt" del "d:\123.txt"

補充1:if not 語句

對于if 語句前面的5種基本文法,都可以加上not參數,如

1、if not "字元串1"=="字元串2" command 語句;

2、if not數值1 equ 數值2 command 語句;

3、If not exist filename command 語句;

4、if not defined 變量 command 語句;

5、if not errorlevel 數值 command 語句。

   在if 條件表達式 (語句) 語句,如沒有not參數,預設是判斷條件成立時,執行語句;如有not參數,判斷條件失敗時,執行語句。

我們看一下下面的例子:

例17

if exist "c:\" (echo C槽存在) else echo C槽不存在

執行後顯示:C槽存在

例18

if not exist "c:\" (echo C槽不存在) else echo C槽存在

不會吧,例18中執行後顯示:C槽不存在,這簡值是在說瞎話了,那到底是什麼回事呢?

if not exist "c:\" (echo C槽存在) else echo C槽不存在

此語句中文意思:如果不存在C:\ 就執行顯示C槽存在;否則<指的是存在C:\ 就執行顯示C槽不存在。

注:if exist 意為如果存在,那麼if not exist就是如果不存在

你的C槽當然是實實在在存在的啦,根椐上面的中文分得知,那執行例18後就顯示為:C槽不存在 通過分析例18,你

應該明白if語句中not參數是怎麼用了吧!

補充2:IF語句嵌套的寫法

我們先來看看

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 

這是一種比較規範的寫法,那這種寫法是怎樣寫的呢?那我們一步步的來:

第一步:

if %a% geq 50 ( ) else echo a小于50

第二步:在第一步geq 50 後面的括号()裡按兩下回車,主要是空兩行出來。

if %a% geq 50 ( 

   if %a% geq 80 ( )else echo小于80

) else echo a小于50

第三步:在第二步geq 80 後面的括号()裡按兩下回車,主要是空兩行出來。

   if %a% geq 80 ( 

      if %a% geq 100 ( ) else echo a小于100

   )else echo小于80

第四步:在第三步geq 100 後面的括号()裡按兩下回車,主要是空兩行出來。

      if %a% geq 100 (

         echo a大于等于100

      ) else echo a小于100

   上面的代碼中,if %a% 和 )else 要适當的縮進,以達到寫書清晰!

繼續閱讀