我在理解嵌套 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。我在这里缺少什么?除非首先省略参数,否则脚本不会给出任何错误。
对于您的用例,我实际上不确定您是否需要 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,你就缺少一个括号:
您的批次:
Run Code Online (Sandbox Code Playgroud)IF %1% == 0 ( IF %2% == 0 ( goto proc1 ) ELSE ( goto proc2 ) ***MISSING )*** ELSE ( goto proc3 )
应该工作的批次:
IF "%1%" == "0" (
IF "%2%" == "0" (
goto proc1
) ELSE (
goto proc2
)
) ELSE (
goto proc3
)
Run Code Online (Sandbox Code Playgroud)