如何在if块中实现赋值?

时间:2012-04-02 02:49:19

标签: batch-file

if块之前的分配(即set语句)直到if块之后才会实现。因此,换句话说,您不能依赖于if块中的变量赋值。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

立即实现IF或FOR块中的分配。没有正确实现的是用百分号括起的变量值的替换。您必须注意,在执行行之前,替换了%variable%值。例如:

set var=Old value
set var=New value & echo %var%

以前的命令显示:“旧值”。解决此问题的方法是通过延迟扩展,即将变量括在感叹号中而不是百分比,并在开头添加 setlocal ... 命令。那就是:

setlocal EnableDelayedExpansion
set var=Old value
set var=New value & echo !var!

这样,!var!更改值直到 echo!var!命令执行(延迟扩展)并执行上一个 set 命令后,以前的命令显示:“新值”。

同样的讨论适用于括号内的任何变量 。例如:

set var=Old value
if 1 == 1 (
   set var=New value
   echo %var%
)

...是错误的,因为%var%值在执行整个IF(或FOR)之前只展开一次。你必须使用:

setlocal EnableDelayedExpansion
set var=Old value
if 1 == 1 (
   set var=New value
   echo !var!
)

输入 SET /?了解更多详情。