Windows 为什么不在for循环批处理脚本的每次迭代中重新定义变量?
我有一个问题,我想在for循环的每次迭代中重新定义一个变量。我不明白这为什么不起作用。我尝试过使用Windows 为什么不在for循环批处理脚本的每次迭代中重新定义变量?,windows,batch-file,for-loop,Windows,Batch File,For Loop,我有一个问题,我想在for循环的每次迭代中重新定义一个变量。我不明白这为什么不起作用。我尝试过使用启用延迟扩展,但没有成功 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 fo
启用延迟扩展
,但没有成功
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\u time
都会更新。用(
和)
定义并用%variable Name%
引用的块内的每个环境变量都已由命令处理器在解析该块时展开。这可以在命令提示符窗口中使用echo on
运行批处理文件时看到,或者使用rem
删除或注释掉@echo off
解决方案是使用延迟扩展,如下所示
@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
总是更好。您掉进了陷阱!变量已设置,但已提前展开,因此看不到更新的值。。。例如,有完全相同的问题…我应用了你第一个链接的答案,但仍然不起作用。是否因为我在每次迭代中“从头开始”重新定义变量而有所不同?延迟扩展也必须应用于!约会代码>和!时间代码>…您想将此作为正式答案吗?请参阅@Mofi's。。。