如何使用 Batch 在文件夹名称中创建一个目录 date/time?

how to create a directory with date/time in foldername with Batch?

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

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_

我在 mkdir 命令中没有看到 "dt" 的值。这里有什么问题?

您需要使用延迟扩展:

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