我有一个批处理文件,它通过for循环中的SET初始化变量,用于磁盘上的一组文件:
for %%f in (%MYTARGETDIR%\*config.xml) do (
SET TMPFILE=%%F.tmp
echo In loop %TMPFILE%
)
echo End loop %TMPFILE%
当我在一个全新的命令shell (没有定义TMPFILE )中运行这个命令时,in loop echo是空的,但end loop echo不是。
当我第二次运行时,它已经设置好了,并输出它的值,忽略这个设置,直到循环结束。
知道这是为什么吗,以及解决方法是什么?
发布于 2009-03-27 19:01:07
这是因为()块只被解析一次,它会在运行循环之前替换%TMPFILE%。
发布于 2009-03-27 19:14:41
根据记录,更正后的脚本如下所示:
setlocal ENABLEDELAYEDEXPANSION
for %%f in (%MYTARGETDIR%\*config.xml) do (
SET TMPFILE=%%F.tmp
echo In loop !TMPFILE!
)
echo End loop %TMPFILE%
感谢chris的帮助。
发布于 2009-03-29 02:14:59
您也可以使用CALL SET来代替延迟扩展。
https://stackoverflow.com/questions/691047
复制相似问题