通過學習Batch入門教程的前兩章內容,我們已經大致掌握了基本概念和認識變量的相關內容,今天我們要跟大家繼續分享第三章內容: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入門教程中的進階知識,記得關注哦!
