six*_*rm1 2 windows logging cmd date batch-file
我正在尝试运行一个批处理文件,该文件运行可执行文件并将其输出重定向到日志文件。日志文件必须将日期和时间作为文件名。这是我正在使用的命令:
"%PROGRAMFILES%\PostgreSQL\9.4\bin\vacuumdb.exe" --username postgres --verbose --analyze --all > E:\Logs\VacuumDB\%date:~10,4%_%date:~4,2%_%date:~7,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%.log 2>&1
Run Code Online (Sandbox Code Playgroud)
此命令在直接粘贴到 cmd 中时有效。日志文件按预期创建为“2015_06_25__11_20_46.log”。但是,粘贴到批处理文件中,然后在cmd中运行时,它不起作用。Cmd 对命令的解释如下:
"C:\Program Files\PostgreSQL\9.4\bin\vacuumdb.exe" --username postgres --verbose --analyze --all 8_21_42.log 1>E:\Logs\VacuumDB\2015_06_26_ 2>&1
Run Code Online (Sandbox Code Playgroud)
注意文件名是如何被截断的,时间现在被附加到命令参数而不是文件名中。所以显然命令失败了。
这肯定是非常简单的事情,但我还没有找到任何方法来解决这个问题。任何帮助是极大的赞赏。
谢谢!
您的问题是,时间字符串可能包含空格(10 点钟之前)您可以将其替换为 0,但我建议使用独立于区域设置的解决方案:
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
Run Code Online (Sandbox Code Playgroud)
它会给你(独立于区域设置!):
20130802203023.304000+120
( YYYYMMDDhhmmss.<fraction>+/-<timedifference to UTC> )
Run Code Online (Sandbox Code Playgroud)
从这里,可以轻松地根据您的需要对其进行格式化。例如:
set datetime=%datetime:~0,8%-%datetime:~8,6%
20130802-203023
Run Code Online (Sandbox Code Playgroud)
这是一个不使用 SET 命令的内联版本
C:\test.bat > C:\log\test_%date:~10%%date:~4,2%%date:~7,2%-%time:~0,2%%time:~3,2%%time:~6,2%.log 2>&1
Run Code Online (Sandbox Code Playgroud)
这个例子将输出从C:\ test.bat的,并写了一个名为日志test_YYYYMMDD-HHMMSS.log到C:\日志目录
输出文件示例:c:\log\test_20181008-1121.log
| 归档时间: |
|
| 查看次数: |
26630 次 |
| 最近记录: |