在 Windows Bat 文件中嵌套 IF

ram*_*mki 7 script batch-file

我在理解嵌套 IF 在 windows .bat 脚本中的工作方式时遇到了一些困难。我希望实现的目标如下。我将向 bat 文件传递​​两个参数

如果第一个参数 = 0 AND 如果第二个参数 = 0 运行 proc1

IF 第一个参数 = 0 AND 第二个不是 0 运行 proc2

如果第一个参数不是 0 run proc 3

到目前为止我编写的代码框架是

@echo off

IF %1% == 0 (
    IF %2% == 0 ( goto proc1
    ) ELSE ( goto proc2
)
  ELSE ( goto proc3
)

:proc1
echo in Proc1 0 0
pause
exit
:proc2
echo in Proc2 0 N0
pause
exit
:proc3
echo in Proc3 N0  0
pause
exit
Run Code Online (Sandbox Code Playgroud)

问题是它在前两个条件下工作正常,但是当第一个参数非零时,它仍然通过 proc1 而预期是 proc3。我在这里缺少什么?除非首先省略参数,否则脚本不会给出任何错误。

Jon*_*nno 6

对于您的用例,我实际上不确定您是否需要 ELSE,更不用说嵌套的 IF:

@echo off

IF NOT "%1%"=="0" (
    goto proc3
)
IF "%2%"=="0" ( 
    goto proc1
) 

goto proc2 

:proc1
echo in Proc1 0 0
pause
exit
:proc2
echo in Proc2 0 N0
pause
exit
:proc3
echo in Proc3 N0  0
pause
exit
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因你真的想嵌套你的 IF,你就缺少一个括号:

您的批次:

IF %1% == 0 (
    IF %2% == 0 ( goto proc1
    ) ELSE ( goto proc2
)
***MISSING )***  ELSE ( goto proc3
)
Run Code Online (Sandbox Code Playgroud)

应该工作的批次:

IF "%1%" == "0" (
    IF "%2%" == "0" ( 
    goto proc1
    ) ELSE ( 
    goto proc2
    )
) ELSE ( 
    goto proc3
)
Run Code Online (Sandbox Code Playgroud)