使用cmd.exe 命令处理器构建一个带时间戳的文件名来记录计划任务的输出
要建立在其他人的答案的基础上,您可能希望创建一个输出文件,该文件的名称中嵌入了日期和/或时间。您可以使用cmd.exe 命令处理器为您执行此操作。
注意:此技术采用内部 Windows 环境变量的字符串输出,并根据字符位置对它们进行切片。因此,以下示例中提供的确切值对于您使用的 Windows 区域可能不正确。此外,对于某些区域设置,日期或时间的某些组件可能会在其值小于 10 时在构造的文件名中引入一个空格。为了缓解此问题,请用引号将您的文件名括起来,以便文件中的任何意外空格name 不会破坏您正在构建的命令行。试验并找出最适合您情况的方法。
请注意,PowerShell 比 cmd.exe 更强大。它更强大的一种方式是它可以处理不同的 Windows 区域。但这个答案是关于使用cmd.exe 解决这个问题,而不是PowerShell,所以我们继续。
使用cmd.exe
您可以通过切片内部环境变量%date%和%time%来访问日期和时间的不同组成部分,如下所示(同样,确切的切片值取决于在窗户):
- 年份(4 位):
%date:~10,4%
- 月份(2位数):
%date:~4,2%
- 日期(2 位数):
%date:~7,2%
- 小时(2 位数):
%time:~0,2%
- 分钟(2 位数):
%time:~3,2%
- 第二个(2 位):
%time:~6,2%
假设您希望使用以下日期/时间格式命名您的日志文件:“Log_[yyyyMMdd]_[hhmmss].txt”。您将使用以下内容:
Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
要对此进行测试,请运行以下命令行:
cmd.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"
综上所述,要将 stdout 和 stderr 从脚本重定向到以当前日期和时间命名的日志文件,可以使用以下命令作为命令行:
cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1
注意在文件名周围使用引号来处理日期或时间组件可能引入空格字符的实例。
在我的例子中,如果当前日期/时间是 10/05/2017 9:05:34 AM,则上述命令行将生成以下内容:
cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1