为什么variables没有被for循环批处理脚本的每次迭代重新定义?

我有这个问题,我想重新定义一个for循环的每个迭代的variables。 我不明白为什么这不起作用。 我曾尝试使用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都会更新。

()定义并用%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总是比较好的, 这里就是一个例子。