DOS命令 的條件判斷(與或非:and、or 、not)

NO IMAGE

DOS 命令實在是太弱,太難用了,基本的邏輯判斷寫起來都很費勁。一般的與或非如何解決呢?

1、非

這個有現成的,條件判斷前加not,例如:

C:\Users\HW>if 1==1 echo Ok
Ok
C:\Users\HW>if not 1==1 echo Ok
C:\Users\HW>

2、與

這個變通實現也還算簡單:

C:\Users\HW>if 1==1 if 2==2 echo Ok
Ok
C:\Users\HW>if 1==1 if 2==3 echo Ok
C:\Users\HW>

較為清晰的寫法:

if 1==1 (if 2==2 echo Ok)
if 1==1 (if 2==3 echo Ok)
相當於Java的這樣的寫法:
if(1==1){
if(2==2){
//echo Ok
System.out.println("Ok");
}
}

3、或

這個實現起來就比較繁瑣了,網上可找到如下幾種:(1)用多個if巢狀的;(2)用2個條件語句給一個變數賦值,再判斷該變數的;(3)用for迴圈的。

這些做法都顯得太麻煩。其實,直接用GOTO語句最簡單,只要滿足1個條件,就直接呼叫滿足條件的語句,毋需像Java或C語言一樣試圖將條件用邏輯判斷關鍵字來歸併。

例如,下面的程式邏輯實現只輸入1個引數或2個引數都不輸入時,列印幫助資訊:

if "%1"=="" goto printHelp
if "%2"=="" goto printHelp
:printHelp
@echo This is a help message, please refere to ...

注意: 如果if條件判斷為1命令,而不是子程式,則這樣寫會導致重複執行多次的問題。例如:

if "%1"=="" echo aaaaaaaaaaaaaaaaaa
if "%2"=="" echo bbbbbbbbbbbbbbbbbb
if "%3"=="" echo cccccccccccccccccc

如果不想用子程式,也可以採用if巢狀的寫法,if巢狀相對來說較為清晰一點:

(1) 不用子程式

if "%1"=="" (echo 1st param null) else (if "%2"=="" (echo 2sd param null) else (if "%3"=="" echo 3th param null) )

(2) 用子程式

if "%1"=="" (goto printHelp) else (if "%2"=="" (goto printHelp) else (if "%3"=="" goto printHelp) )

相當於Java的這樣的寫法(偽碼):

if("%1"==""){
printHelp();
return;
} else{
if("%2"==""){
printHelp();
return;
} else {       
if("%3"==""){
printHelp();
return;
}
}
}