如何批量分支if语句

How to branch if-statements in batch

我刚开始学习 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

如有任何帮助,我们将不胜感激。

您的 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