我有一个批处理文件,该文件通过for循环内的SET初始化变量,用于磁盘上的一组文件:for %%f in (%MYTARGETDIR%\*config.xml) do ( SET TMPFILE=%%F.tmp echo In loop %TMPFILE%)echo End loop %TMPFILE%当我在全新的命令外壳程序(未定义TMPFILE)中运行此命令时,In循环回显为空,但end循环回显则不为空。当我第二次运行时,它已经设置好了,并输出它的值,而忽略了设置,直到循环关闭。为什么会这样,以及解决方法是什么?
3 回答
holdtom
TA贡献1805条经验 获得超10个赞
记录下来,更正后的脚本如下所示:
setlocal ENABLEDELAYEDEXPANSION
for %%f in (%MYTARGETDIR%\*config.xml) do (
SET TMPFILE=%%F.tmp
echo In loop !TMPFILE!
)
echo End loop %TMPFILE%
谢谢克里斯的帮助。
吃鸡游戏
TA贡献1829条经验 获得超7个赞
这是因为读取命令时会替换环境变量。对于以下命令:
for %%f in (%mytargetdir%\*config.xml) do (
set tmpfile=%%f.tmp
echo In loop %tmpfile%
)
for在执行之前,将读取并替换整个命令(从到右括号)。
您需要使用延迟扩展,例如:
@echo off
setlocal enableextensions enabledelayedexpansion
set full=/u01/users/pax
:loop1
if not "!full:~-1!" == "/" (
set full2=!full:~-1!!full2!
set full=!full:~,-1!
goto :loop1
)
echo !full!
endlocal
启用延迟扩展后,"%"标记仍然像以前一样工作,但是您可以使用"!"标记来执行延迟扩展。
- 3 回答
- 0 关注
- 526 浏览
添加回答
举报
0/150
提交
取消