2015-04-22 29 views
2

我對Windows批處理文件非常新,所以很抱歉,如果這是完全明顯的。Windows批處理文件中的三重IF聲明? IF和IF和IF?其他錯誤

基本上,在批處理文件中,我需要一個三重IF語句來檢查命令行是否給出了3個參數。如果他們在那裏,它使用GOTO來執行更多的代碼。如果它沒有全部三個,那麼它會迴應錯誤。

這是我的代碼到目前爲止,如果我輸入三個參數,然後將其直接轉到:parametererror不起作用

IF defined %1% (
    IF defined %2% (
    IF defined %3% (
    GOTO copyoutvariables 
    ELSE GOTO parametererror 
    ) 
) 
) 

:parametererror 
Echo You did not enter the right amount of parameters. 

:copyoutvariables 
Echo Irrelevant Code goes here. 

我認爲ELSE的語法是錯誤的。我不知道它應該去哪裏。 有沒有更好的方法來格式化三重IF? 有沒有辦法和我的IF? ELSE語句應該放在哪裏?

+0

**是**是否正在使用MS-DOS或者您是在討論Windows的批處理文件? –

回答

0

你的代碼有幾個問題:

  • IF defined只能應用到環境變量,而不是批處理文件的參數。
  • 您的%1%構造錯誤,因爲%1被替換爲第一個參數(如果有的話),而第二個%被忽略。
  • 檢查參數是否給出的正確方法是:IF "%~1" equ "" echo Parameter 1 not given
  • 您不需要檢查是否給出%1%2參數;只是爲了檢查%3是否給出。這樣,您的代碼可能會減少到這一個:

IF "%~3" neq "" (
    GOTO copyoutvariables 
) ELSE (
    GOTO parametererror 
) 
+0

非常感謝你,我知道我的代碼非常糟糕,這是最好的解釋,爲什麼,它的工作! – misskat

1

您需要圍繞ELSE多一些括號。

IF defined %1% (
    IF defined %2% (
    IF defined %3% (
     GOTO copyoutvariables 
    ) ELSE (
     GOTO parametererror 
    ) 
) 
) 
2

我認爲這是你的包圍,基於一些遙遠的記憶。

嘗試:

IF defined %1% IF defined %2% IF defined %3% 
(
    GOTO :copyoutvariables 
)  
ELSE 
(
    GOTO :parametererror 
) 

:parametererror 
Echo You did not enter the right amount of parameters. 

:copyoutvariables 
Echo Irrelevant Code goes here. 

希望有所幫助。

+0

由於圓括號必須位於同一行,因此這將失敗。 'IF ...('和')ELSE('。但是組合的'IF defined%1%IF defined ...'看起來不錯 – jeb

+0

啊,謝謝。已經有一段時間了,所以很高興看到我不是完全錯誤的! – BishNaboB