如何批量分支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
我刚开始学习 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