我试图在批处理文件中打印带有时间戳的每个文件名。 这是我的批处理脚本:
@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 循环时输出始终是同一时间?
答案 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 /?