2016-11-10 127 views
0

当运行首次通过CMD下面的批处理文件,我希望它打印出来correct而是再次打印出error嵌套if语句在批处理工作不正常

@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

+2

可能重复的[批量嵌套如果语句错误与未定义的变量](http://stackoverflow.com/questions/35267196/batch-nested-if-statement-error-with-not-defined-variables) – aschipfl

回答

1

看一看delayed expansion

每当你括号的一个封闭的块中改变一个变量的值,你必须

1)将setlocal EnableDelayedExpansion在脚本的开始(共同的地方是下@echo off一行)和
2)将%myVar%更改为!myVar!

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

延迟是必要的,因为if语句的整个块是一次计算的 - >在没有延迟扩展的情况下更改一个值不会像之前计算的那样。
但是,如果延迟展开,则告诉程序,当它到达那里时,必须再次计算该零件。

+1

当然。由于在例程开始时没有'setlocal',所以在过程结束后所做的任何更改都会保留,所以'var2'被设置为第二次运行开始时第一次运行时输入的值。出于这个原因,通常以'setlocal'开头,这可以确保当过程结束时,对环境所做的任何更改都会被丢弃。 – Magoo

+0

@Magoo感谢您的澄清!这也有助于我理解。 – geisterfurz007

+0

@TonyJ很高兴听到! – geisterfurz007