首次通过CMD运行以下批处理文件时,我希望它打印出correct
,而是打印出error
@echo off
SET /p var1="Enter 1 "
IF "%var1%"=="1" (
SET /p var2="Enter 1 "
IF "%var2%"=="1" (
echo correct
) ELSE (
echo error
)
)
在同一个CMD会话中再次运行时,每次都会打印出correct
。我错过了第一次打印correct
的东西吗?
答案 0 :(得分:1)
每当您更改闭合的括号内的变量值时,您必须
1)将setlocal EnableDelayedExpansion
放在脚本的开头(常用位置在@echo off
行下方)和
2)将%myVar%
更改为!myVar!
。
我假设您的程序行为与此类似,因为cmd窗口“保存”变量的值。您可以尝试使用两个值1来运行它,并且如您所说,它将返回error
。在下一次运行中给出程序1和2,它仍然会说正确。
需要延迟,因为if语句的整个块是一次计算的 - >在没有延迟扩张的情况下改变一个值将不会被视为之前计算过的 如果延迟扩展,你告诉程序,它必须在到达那里时再次计算这个部分。