为什么变量没有在for循环批处理脚本的每次迭代中重新定义?

时间:2015-08-27 21:49:08

标签: windows batch-file for-loop

我有这个问题,我想在for循环的每次迭代中重新定义一个变量。我无法弄清楚为什么这不起作用。我曾尝试弄乱enabledelayedexpansion,但没有成功。

echo off
for /f "tokens=1-7 delims=::/ " %%A in ("%DATE% %TIME%") do set capture_time=%%D-%%B-%%C_%%E%%F%%G
for /l %%a in (1,1,3) do (
    echo %capture_time%
    timeout 3 /nobreak
    for /f "tokens=1-7 delims=::/ " %%A in ("%DATE% %TIME%") do set capture_time=%%D-%%B-%%C_%%E%%F%%G
)

我想要的输出是这样的:

2015-08-27_132506.50
2015-08-27_132509.50
2015-08-27_132512.50

每次循环运行时,capture_time都会更新。

1 个答案:

答案 0 :(得分:1)

在使用()定义并用%Variable Name%引用的块中的每个环境变量在解析块时已由命令处理器扩展。这可以在使用echo on或使用@echo off删除或注释rem的命令提示符窗口中运行批处理文件时看到。

解决方案是使用延迟扩展,如下所示。

@echo off
setlocal EnableDelayedExpansion
for /f "tokens=1-7 delims=::/ " %%A in ("%DATE% %TIME%") do set "capture_time=%%D-%%B-%%C_%%E%%F%%G"
for /l %%a in (1,1,3) do (
    echo !capture_time!
    timeout 3 /nobreak
    for /f "tokens=1-7 delims=::/ " %%A in ("!DATE! !TIME!") do set "capture_time=%%D-%%B-%%C_%%E%%F%%G"
)
endlocal

有关延迟扩展的更多详细信息,请打开命令提示符窗口,执行set /?并仔细阅读所有帮助页面输出到命令提示符窗口。在一个例子的帮助中解释了延迟扩展。

为什么总是更好地使用set "variable=value"代替set variable=value,例如here

相关问题