Batch file 如何在if块内实现赋值?
在if块内进行的赋值(即set语句)直到if块之后才能实现。因此,换句话说,您不能依赖if块中的变量赋值。如何解决此问题?立即实现IF或FOR块中的赋值。没有正确认识到的是用百分号括起来的变量值的替代。您必须注意,在执行该行之前,将替换%variable%值。例如:Batch file 如何在if块内实现赋值?,batch-file,Batch File,在if块内进行的赋值(即set语句)直到if块之后才能实现。因此,换句话说,您不能依赖if块中的变量赋值。如何解决此问题?立即实现IF或FOR块中的赋值。没有正确认识到的是用百分号括起来的变量值的替代。您必须注意,在执行该行之前,将替换%variable%值。例如: set var=Old value set var=New value & echo %var% set var=Old value if 1 == 1 ( set var=New value echo %va
set var=Old value
set var=New value & echo %var%
set var=Old value
if 1 == 1 (
set var=New value
echo %var%
)
以前的命令显示:“旧值”。解决此问题的方法是通过延迟展开,即将变量用感叹号而不是百分数括起来,并在开头添加一个setlocal…命令。即:
setlocal EnableDelayedExpansion
set var=Old value
set var=New value & echo !var!
这边!瓦尔!值被替换,直到回显!瓦尔执行strong>命令(延迟扩展)并在执行上一个set命令之后,因此上一个命令显示:“新值”
同样的讨论也适用于括号内的任何变量。例如:
set var=Old value
set var=New value & echo %var%
set var=Old value
if 1 == 1 (
set var=New value
echo %var%
)
…是错误的,因为在执行整个IF(或FOR)之前只扩展了一次%var%值。您必须使用:
setlocal EnableDelayedExpansion
set var=Old value
if 1 == 1 (
set var=New value
echo !var!
)
键入SET/?了解更多详细信息。为什么需要启用setlocal DelayedExpansion?在注册表中DelayedExpansion不是默认启用的吗?默认情况下它不是启用的,但是您可以在注册表中启用它。键入
CMD/?
了解有关此主题的更多详细信息。