为什么当前时间没有在FOR循环中更新?

时间:2018-01-07 08:50:03

标签: batch-file time cmd

我试图在批处理文件中打印带有时间戳的每个文件名。 这是我的批处理脚本:

@echo off
setlocal enabledelayedexpansion

for /R "C:\Users\user\Desktop\BdayClip" %%B in (*.*) do (
    echo "%time::=-%%%~xG"
    choice /d y /t 1 > nul
)

我获取的所有文件名称都带有相同的时间戳,延迟时间为1秒。但时间戳不变!

网上有人说添加enabledelayedexapnsion对他有用,但它在我的脚本上没有任何改变。

输出如下:

6-32-12.34.png
6-32-12.34.png
6-32-12.34.png

为什么在运行 FOR 循环时输出始终是同一时间?

1 个答案:

答案 0 :(得分:0)

你遇到了delayed expansion陷阱。 set /?解释了 IF FOR 示例的延迟扩展。您已启用延迟扩展,但由于引用具有百分号的动态环境变量TIME而未使用它,这意味着在执行命令 FOR 之前在预处理阶段使用命令块进行扩展。 / p>

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /R "%USERPROFILE%\Desktop\BdayClip" %%B in (*) do (
    echo !TIME::=-!%%~xB
    %SystemRoot%\System32\choice.exe /d y /t 1 >nul
)
endlocal

现在使用感叹号引用动态环境变量TIME,这意味着使用延迟扩展。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • choice /?
  • echo /?
  • endlocal /?
  • for /?
  • set /?
  • setlocal /?