如何使用Batch在文件夹名称中创建包含日期/时间的目录?

时间:2015-01-23 21:40:03

标签: batch-file

我的批处理文件中有以下代码:

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命令中。这有什么不对?

1 个答案:

答案 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%"
)