在文件名中创建日期和时间的批处理脚本。但是,第二天没有工作[重复]

问题描述 投票:0回答:1

我正在使用此脚本创建一个 1 MB 的文件和带有日期和时间的文件名。我正在使用任务计划程序每 5 分钟重复一次批处理文件。但是,它仅在 4 月 26 日成功创建文件。 4 月 27 日,任务仍然成功运行,但 /temp 中没有保存文件

cd C:\temp
echo Start > dummy.txt
for /l %%x in (1, 1, 35000) do echo %date% %time% >> C:\temp\dummy.txt
COPY dummy.txt %date:~-4,4%%date:~-10,2%%date:~-7,2%-%time:~0,2%%time:~3,2%%time:~6,2%.txt
echo End >> dummy.txt

调试简单的批处理脚本

datetime batch-file
1个回答
0
投票

您看到的问题是由于延迟扩展造成的,当您在这样的循环中操作时,变量 %date% 和 %time% 在开始时确定,并且不会在脚本循环运行时更新。你可以看到,如果你将你的查询回显到屏幕上:

for /l %%x in (1, 1, 35000) do echo %date% %time%

你会看到时间永远不会改变。

修复是启用延迟扩展,并将循环代码括起来(看起来延迟扩展不起作用),最后将 % 变量字符替换为 !这告诉系统每次循环运行时都应该重新评估它们。经过测试,我认为这应该可以完成您想要的工作:

setlocal ENABLEDELAYEDEXPANSION
cd C:\temp
echo Start > dummy.txt
for /l %%x in (1, 1, 35000) do (
echo !date! !time! >> C:\temp\dummy.txt
)
set longHour=%time:~0,2%
set hour=%longHour: =0%
COPY dummy.txt %date:~-4,4%%date:~-10,2%%date:~-7,2%-%hour%%time:~3,2%%time:~6,2%.txt
echo End >> dummy.txt

注意,我发现的另一个问题是 time:~0,2 只有在你有 2 位数的小时数时才能正常工作(如果我没有在上午 10 点之前碰巧尝试过,我就不会注意到!),所以例如在上午 10 点之后它可能会生成:

20232904-101735.txt

但是在上午 10 点之前你会得到:

20232904-95935.txt

在 - 和 9 之间有一个空格,所以如果找到一个空格,我也用 0 替换那个空格,所以你最终得到:

20232904-095935.txt

© www.soinside.com 2019 - 2024. All rights reserved.