2012-06-03 42 views
4

可以在批處理文件if塊中指定多個帶「或」/「和」的條件嗎?如何在批處理文件中的「If」中使用多個條件?

如果沒有那麼複雜,我可以至少使用類似:

if value1 < value < value2 

基本上我的目的是檢查當前系統時間是否在一定的時間間隔(2.05 AM至55分要準確)和如果有,執行某些命令。

回答

13

添加到dbenham的答案,您可以使用ifgoto語句的組合來模擬邏輯運算符(AND,OR)。

爲了測試條件1和codition2

if <condition1> if <condition2> goto ResultTrue 

:ResultFalse 
REM do something for a false result 
    goto Done 

:ResultTrue 
REM do something for a true result 

:Done 

爲了測試條件1或codition2

if <condition1> goto ResultTrue 
    if <condition2> goto ResultTrue 

:ResultFalse 
REM do something for a false result 
    goto Done 

:ResultTrue 
REM do something for a true result 

:Done 

標籤當然是任意的,只要你可以選擇自己的名字他們是獨特的。

+0

我以前寫'如果c1如果C2轉到AndTrue'在此(清晰的)的方式:'設置和= IF ','如果c1%和%c2轉到AndTrue'。你必須注意這些結構不能有ELSE部分! – Aacini

+0

@Aacini我的結構在「ResultFalse」部分有「else」的情況。 –

+0

我發現使用GOTO進行AND模擬沒有任何好處 - 您可以簡單地將IF連接起來,並將ELSE與最後一個IF進行比較。但是GOTO是OR的一個很好的解決方案。另一個選擇是使用一個臨時變量:'set「OR =」&((如果設置爲「OR = 1」)並且如果設置「OR = 1」)如果定義OR(回顯TRUE)else(回顯FALSE) '。如果您的OR測試位於括號內的塊內,則使用此方法代替GOTO的一個原因是 - 您無法在帶括號的代碼塊中GOTO標籤。 – dbenham

5

批處理中沒有邏輯運算符。但AND易於用兩條IF語句模擬

if value1 lss value if value lss value2 REM do something 

批處理IF語句不知道如何比較時間。批量IF知道如何比較整數和字符串。

一種選擇是將時間轉換爲午夜過後的分鐘或秒鐘。

另一種選擇是將時間格式化爲小時,分鐘(如果需要,秒數)爲每個2位數(根據需要加前綴0)。時間應該是24小時制(軍事時間)。

0

您可以打破你的病情爲2和使用,如果,如果設置2個條件

if %value% GTR %value1% (
echo Value is greater that %value1%) else call :Error 
if %value% LSS %value2% (
echo Value is less than %value2%) else call :Error 
::Write your Command if value lie under specified range 
exit 

:Error 
echo Value doesn't lie in the range 
::Write your command for if value doesn't lie in the range 
exit 
相關問題