2011-05-19 258 views
23

有沒有辦法說在批處理文件類似Windows批處理文件:多個if條件

 
if %1 == 1 or %1 == 2 

?或者,甚至更好,如果我可以指定一組候選值的像

 
if %1 in [1, 2, 3, 4, ... 20] 
+0

確切的重複:http://stackoverflow.com/questions/2772180/cmd-exe-complex-conditions – 2011-05-19 14:22:53

+0

所以我猜這是不可能的? – MxyL 2011-05-19 14:33:53

+0

據我所知不是。 – 2011-05-19 14:36:27

回答

22

一種方式來實現邏輯或者是使用多個條件語句是goto相同的標籤。

if %1 == 1 goto :cond 
if %1 == 2 goto :cond 
goto :skip 
:cond 
someCommand 
:skip 

爲了測試組成員,你可以使用一個for循環:

for %%i in (1 2 3 4 ... 20) do if %1 == %%i someCommand 

注意==是字符串相等運算符。 equ是數字相等運算符。

+0

@Joey:他們通常表現相同,但並非總是如此:'if 5 equ 05 echo yes'打印「yes」,但「if 5 == 05 echo yes」不會。 – bk1e 2011-05-23 01:12:02

+0

啊,領先零。那些'9 equ 09'因爲它試圖將它們解釋爲八進制而失敗。 Nevermind最初的評論,然後:-) – Joey 2011-05-23 10:21:41

9

我知道這是舊的,但我只是想讓你知道,它確實是可能的,不像以前的帖子說。基本上你將兩個IF命令綁定成一個。

語法:IF equation (cmd if true)else command if false

試試這兩個變量的一個變量(執行或陳述書注意,您可以使用一個以上的變量(IF XX和XX語句來執行)

set varone=1 
set vartwo=2 

if %varone% equ 1 (if %vartwo% equ 2 (echo TRUE)else echo FALSE)else echo FALSE 

井)

if %a% equ 1 (echo pass)else if %a equ 2 (echo pass)else echo false 

可以替代回聲通過/失敗,您的命令

+0

只是注意到了這一點。很高興知道有一種方法可以做到這一點(並可能導致其他用途),但語法使得它看起來非常混亂!在這種情況下,循環遍歷一組候選值將更清晰。 – MxyL 2014-02-05 16:23:20

21

「和」結果很簡單 - 只是不是您期望的語法: 這3個示例說明了這一點。

在的話:如果1 == 1和2 == 2然後回聲「你好」

if 1==1 echo hello 
hello 

if 1==1 if 2==2 echo hello 
hello 

if 1==1 if 2==1 echo hello 
(nothing was echoed) 
+0

這是真正的答案。使用'goto's是最好的解決方案 – 2016-08-15 23:00:36

0

有點晚的比賽中,但儘管如此,如果這個假設可以幫助任何人在磕磕絆絆的問題。我這樣做的方法是使用回聲的組合通過管道輸送到FINDSTR,這種方式:

(echo ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
    echo Input is either 1 or 2 
) 

由於FINDSTR是一個外部命令,我建議不使用此一環,它可以經過反覆的1000的內部。如果不是這種情況,這應該解決你試圖做的事情,而不是使用多個ifs。另外,在選擇「:」時沒有什麼特別之處,只需使用一個不太可能成爲%1中值的一部分的分隔符。

感謝其他人指出另一個似乎有類似問題的鏈接,我也會在這裏發佈這個回覆,以防萬一有人在這個問題上磕磕絆絆,而且還沒有到達這裏。

+0

這個解決方案可以擴展到大量有效的元素(例如:擴展名列表) – MxyL 2013-11-27 18:17:32

+0

@Keikoku:爲了讓我更好地理解,例如,在上面的原始問題,你是否在尋找可以是1,2,3,...等等的輸入(直到一個巨大的數字)?在這種情況下將不可行。但是,我們當然可以探索更好的方法來適應這一點簡要說明您的情況可以提供幫助 - 如果您已經提出問題,則可以爲您的問題提供鏈接。 – Arun 2013-11-27 21:41:55

+0

我不記得當問題被打開時我正在處理的問題。我想在某個時候我想檢查輸入是什麼,並根據輸入做了一些事情(並且我可以選擇在編寫一個exe文件或批處理文件之間進行選擇) – MxyL 2013-11-27 22:06:14