Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何在if块内实现赋值?_Batch File - Fatal编程技术网

Batch file 如何在if块内实现赋值?

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

在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 %var%
)
以前的命令显示:“旧值”。解决此问题的方法是通过延迟展开,即将变量用感叹号而不是百分数括起来,并在开头添加一个setlocal…命令。即:

setlocal EnableDelayedExpansion
set var=Old value
set var=New value & echo !var!
这边!瓦尔!值被替换,直到回显!瓦尔命令(延迟扩展)并在执行上一个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/?
了解有关此主题的更多详细信息。