Batch學習攻略值得入手,
i春秋助你技能快速提升!
通過學習Batch入門教程的前兩章内容,我們已經大緻掌握了基本概念和認識變量的相關内容,今天我們要跟大家繼續分享第三章内容:Batch入門教程之邏輯判斷。
前期回顧
◀Batch入門教程丨部署與Hello World(上)
◀Batch入門教程丨部署與Hello World(下)
◀Batch入門教程丨進階!認識變量相關概念
邏輯判斷
邏輯判斷(Logical Judgement),是指使用if指令或者其它判斷指令進行判斷并控制流程進行的一種方式,它是程式的重要組成部分。在Batch中,我們大部分時間都會選擇使用if,此外還有邏輯判斷符号||和&&存在。
if
if 可以判斷變量與值、變量與變量、值與值的關系,基本文法如下:

其中,if語句所使用的代碼塊需要使用()括起來,而不是像其它語言那樣的{}。另外,Batch内沒有else if的用法,是以,如果您想要使用else if,那麼您可能需要這樣寫:
也就是說,您必須在else後的代碼塊裡寫if而不是直接緊跟在後面寫if。
當您初次看見這個判斷文法時,可能認為很荒謬。為什麼沒有括号?就像其它語言那樣:
這是Batch的個性。如果您先前對if語句沒有絲毫的了解,可以看一下下面這個奇妙的公式:
例如,我們要判斷1是否等于2,我們就可以這樣寫:
其中else語句可要可不要,如果不需要,則會出現兩種寫法:
如果您是縮進愛好者,可以選擇前者。後者可以讓您的代碼在單行中看起來更簡潔,但是後者不能用else。
if not
與其它語言相似,Batch也有判斷非的方式,隻不過并不是用的!=而是更直接了當的if not,它的用法與if沒有差別,隻是對結果取反而已。
if / not defined
if not defined和if defined用于測試一個變量是否被定義,if not defined的成立條件是沒有定義,if defined的成立條件是已經定義。在if not defined ()後面加上else就相當于是if defined了,原理很好了解。
用法:
執行個體:
if defined則相反。
當然,我們也可以用if來實作if not defined的效果:
也就是說if "%變量名%"==""相當于if not defined變量名。但是大多數情況下,我們建議選取後者使用,因為這樣更加規範,前者不知道會不會有Bug。
if / not exist
if exist和if not exist也是相反的一對判斷。它們判斷某檔案是否存在。用法:
它們也可以使用else。
if 的數字判斷
與set一樣,if也有專用于數字的用法。我們可以比大小。以下是一個簡單的比較大小程式:
用if比較大小的關鍵在于中間的符号。我們判斷兩個值相等可以使用==,但是必須需要前後兩者加上引号。而我們可以直接使用表達數學關系的字母簡稱來代表數字之間的關系(其它的,諸如字元之類的,不能用,隻能用==)。
以下是Batch中判斷數字關系的字母簡稱:
我們就可以用非負性原理來判斷數值之間的關系:
if %ERRORLEVEL%
%ERRORLEVEL%是一個環境變量,它在不同的指令執行後會有不同的值。以下列出一些特殊情況的%ERRORLEVEL%值。
注意:ERRORLEVEL是一個非常奇妙的東西,在有些時候它甚至可以等于任何值,沒人知道它到底能等于多少。上表列出來的隻是一些常見的、較為穩定的錯誤代碼。ERRORLEVEL一般不會等于32。
如果我們要判斷ERRORLEVEL,我們直接使用數學判斷語句即可:
我們可以使用前面提到過的exit /b和if %ERRORLEVEL%來完成程式之間的傳參工作,這将在“調用與參數”中講到。
邏輯判斷符
Batch的邏輯判斷符(Logical Judge)分為兩種:||與&&,它們并不是如三元運算符(Ternary Operator)一樣發揮着if else的作用,而是用來判斷指令是否執行成功。
它的用法是直接接在需要判斷的指令後面:
||代表,若前面的指令不成功,則執行後面的指令,&&相反,若前面的執行成功,則執行後面的指令。它們可以連用,但是如果混用着連用,很容易産生奇怪的Bug,是以筆者不建議連用。
我們可以使用邏輯判斷符完成很多工作,例如,我們判斷使用者的輸入是否為數字,來提前避免處理過程中出現不必要的問題。
如果a不是數字,@set /a c=b+1a就會出現問題,于是就會被||檢測到,随即執行後面的指令。不過,為什麼不寫成set /a c=b+a呢?因為如果單純地将一個非數字的變量寫入表達式中,會被直接看作是0,當再加上一個數字的時候,就相當于想要把1a這個數字字母組合看成數字,這是不可能的,于是自然會失敗。
至于為什麼要添加@,這是為了避免回顯的失敗資訊。因為一個指令執行失敗後必定會有失敗資訊,而我們正是在取代失敗資訊,是以我們不需要系統的失敗資訊。當然如果您需要可以把@去掉。
以上是今天與大家分享的内容,如果對你有幫助,記得收藏啊,下期内容我們将繼續探讨Batch入門教程中的進階知識,記得關注哦!