我刚刚开始学习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
任何帮助都将不胜感激。
答案 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