我的批处理文件中有以下代码:
FOR /L %%G IN (1,1,%1) DO (
set dt="%date:~10%%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%"
mkdir %resultsFolder%\Iteration-%%G_%dt%
)
但我看到输出为:
set dt="201501231433"
mkdir C:\Temp\Iteration-1_
我没有看到" dt"的价值。在mkdir命令中。这有什么不对?
答案 0 :(得分:0)
您需要使用延迟扩展:
SETLOCAL EnableDelayedExpansion
FOR /L %%G IN (1,1,%1) DO (
set dt=%date:~10%%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%
REM Updated command to use delayed 'dt' variable.
mkdir "%resultsFolder%\Iteration-%%G_!dt!"
)
ENDLOCAL
如果没有延迟扩展,%dt%
循环开始时会计算FOR
。在这种情况下,首次解析FOR
循环时它是空的,因此它将在循环的生命周期内保持为空。通过延迟扩展,每次迭代都会计算!dt!
。
请注意,我还调整了路径中的引用用法。
但是,如果您的目标是让所有文件夹具有相同的时间戳,那么您真的不需要将dt
计算放在FOR
循环中。只需移动此语句,您就可以完成整个过程而不会延迟扩展:
set dt=%date:~10%%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%
FOR /L %%G IN (1,1,%1) DO (
mkdir "%resultsFolder%\Iteration-%%G_%dt%"
)