Windows批处理文件中的三重IF语句? IF和IF和IF?其他错误

时间:2015-04-22 13:59:09

标签: windows batch-file if-statement cmd

我对Windows批处理文件非常新,所以很抱歉,如果这是非常明显的。

基本上,在批处理文件中,我需要一个三重IF语句来检查命令行上是否给出了3个参数。如果它们在那里,它使用GOTO来执行更多代码。如果它没有全部三个,则它回应错误。

这是我到目前为止的代码,它不起作用

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.

如果我输入三个参数,那么它会直接进入:parametererror

我认为ELSE的语法是错误的。我真的不知道应该去哪里。 有没有更好的格式化三重IF的方法? 有没有办法和我的IF? ELSE声明应该在哪里?

2 个答案:

答案 0 :(得分: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.

希望有所帮助。

答案 1 :(得分:0)

您的代码有几个问题:

  • IF defined只能应用于环境变量,而非批处理文件参数。
  • 您的%1%构造错误,因为%1被第一个参数(如果有)替换,第二个%被忽略。
  • 检查参数是否给出的正确方法是:IF "%~1" equ "" echo Parameter 1 not given
  • 您无需检查是否同时提供了%1%2参数;只是为了检查是否给出了%3。这样,您的代码可能会缩减为以下代码:

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