批处理中的嵌套if语句无法按预期工作

时间:2016-11-10 05:39:09

标签: batch-file

首次通过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的东西吗?

1 个答案:

答案 0 :(得分:1)

查看delayed expansion

每当您更改闭合的括号内的变量值时,您必须

1)将setlocal EnableDelayedExpansion放在脚本的开头(常用位置在@echo off行下方)和
2)将%myVar%更改为!myVar!

我假设您的程序行为与此类似,因为cmd窗口“保存”变量的值。您可以尝试使用两个值1来运行它,并且如您所说,它将返回error。在下一次运行中给出程序1和2,它仍然会说正确。

需要延迟,因为if语句的整个块是一次计算的 - >在没有延迟扩张的情况下改变一个值将不会被视为之前计算过的 如果延迟扩展,你告诉程序,它必须在到达那里时再次计算这个部分。