正确地为批处理脚本创建的日志文件添加时间戳

时间:2012-07-10 21:22:11

标签: windows batch-file timestamp

我正在尝试创建一个日志文件,其中包含正在批处理文件中发生的事件的时间戳。

从下面的代码中可以看出,在编写批处理文件时,我不是专家。尽管技术很差,但这个过程仍然可行。为了防止批处理文件自身删除,我将其设置为只读。我将解决如何在某些时候排除批处理文件。现在,这并不重要。

@echo off
echo Compressing Files...
echo Compression Batch File STARTED: %date% %time% >> c:\temp\backup-compress.log
echo --------------------------------------------- >> c:\temp\backup-compress.log
for %%X in (*) do ( 
    "c:\Program Files\7-Zip\7z.exe" a -tgzip "%%X.gz" "%%X"
    echo %%X Compressed: %date% %time:~-11,8% >> c:\temp\backup-compress.log
    echo Deleting: %%X
    del "%%X"
    echo %%X Deleted: %date% %time:~-11,8% >> c:\temp\backup-compress.log
    )
echo Moving compressed copies to Compressed Backups folder...
move *.gz "Compressed Backups\" > NUL
echo --------------------------------------------- >> c:\temp\backup-compress.log
echo Compression Batch File FINSHED: %date% %time% >> c:\temp\backup-compress.log
echo Compression completed successfully...
echo

生成的日志文件看起来就是我想要的,但是,时间戳和日期在整个日志中保持不变。我不会在批处理文件中发生事件时更新时间戳,而只会看到批处理文件的开始时间和日期,而不是每个%time%和%date%实例。

如何更正此问题并查看我正在创建的日志文件的正确时间和日期戳?

PS:请原谅我这篇文章的篇幅,这可能是一个简单的问题需要解决。此外,如果标签不太正确,我道歉,这是我第一次真正发布一个问题,虽然该网站一直是一个很好的答案资源。

2 个答案:

答案 0 :(得分:4)

这是因为cmd在执行解析语句时不会直接扩展变量。在这种情况下的一个陈述是完整的for,包括它之后的块。所以保留在for循环中的只是文字字符串,没有变量。

您可以使用延迟扩展来解决问题。将以下内容放在批处理的开头:

setlocal enabledelayedexpansion

然后在循环中使用!date!!time!。这将在执行语句之前扩展变量,从而按预期工作。

答案 1 :(得分:0)

我使用一种不同的方法来获得适当的时间,因为我不关心毫秒。

我像这样设定时间:

FOR /F %%A IN ('TIME/T') DO SET timeEdit=%%A
ECHO %timeEdit%

这样我就可以按照我想要的方式获得时间,唯一的缺点就是这比setlocal方法要长一些。如果你想多次捕获,你需要两条线,因为你很难为时间设置一个变量,而不是实时从系统中捕获时间。