如何批量分支if语句

时间:2015-09-01 02:35:04

标签: windows batch-file syntax-error branch statements

我刚刚开始学习Batch,虽然我无法弄清楚在其他if语句中分支if语句的语法。如,

@echo off
set first=
set second=
set /P first=first?: %=%
if /I "%first%"=="y" (
     echo a.1
     set /P second=second?: %=%
     if /I "%second%"=="y" (
          echo b.1
     ) else if %second%=="n" (
          echo b.2
     ) else (
          echo b.3
     )
) else if /I "%first%"=="n" (
     echo a.2
) else (
     echo a.3
)
pause

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的IF逻辑非常好。你的问题是需要延迟扩展。解析语句时会扩展%second%,并且一次性解析整个复杂的IF逻辑。因此%second%扩展为执行IF语句之前存在的值,在您的情况下是空字符串。

解决方案是启用延迟扩展,然后使用!second!扩展值。解析语句后会发生延迟扩展。

@echo off
setlocal enableDelayedExpansion
set first=
set second=
set /P first=first?: %=%
if /I "%first%"=="y" (
     echo a.1
     set /P second=second?: %=%
     if /I "!second!"=="y" (
          echo b.1
     ) else if "!second!"=="n" (
          echo b.2
     ) else (
          echo b.3
     )
) else if /I "%first%"=="n" (
     echo a.2
) else (
     echo a.3
)
pause