当第一个小时数为零时,向文件名发出附加时间戳

时间:2011-05-12 09:34:29

标签: file time batch-file timestamp

在Windows 2008框中,如果在09:59之后和00:00之前,以下行可以正常工作。

REN "D:\myfile.out" myfile-%DATE:/=%-%TIME::=%%.out

但是,如果我在10:00之前执行此操作,则会出现语法错误。它似乎试图用空格而不是零重命名文件。这导致错误。例如:

Myfile-120511- 95343.out - 

我需要它保存,没有像这样的错误:

Myfile-120511-095343.out

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您需要及时编辑前导空格以及编辑冒号(:)

set FormatedTime=%Time: =0%

REN "D:\myfile.out" myfile-%DATE:/=%-%FormatedTime::=%.out

答案 1 :(得分:0)

您必须考虑前导空格和区域设置日期和时间格式。

我使用这段代码,(1)暂时将日期和时间格式字符串更改为众所周知的格式,(2)通过适当处理空格来解析返回的%date%和%time%,以及(3)在LOGDATETIME变量中放置一个完整的时间戳。

:logdatetime
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul
set LogDate=%date%
reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul
set LogTime=%Time%
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
set loghour=%logtime:~0,2%
if "%loghour:~0,1%" == " " set loghour=0%loghour:~1,1%
set logmin=%logtime:~3,2%
if "%logmin:~0,1%" == " " set logmin=0%logmin:~1,1%
set logsec=%logtime:~6,2%
if "%logsec:~0,1%" == " " set logsec=0%logsec:~1,1%
set logyear=%logdate:~0,4%
set logmonth=%logdate:~5,2%
if "%logmonth:~0,1%" == " " set logmonth=0%logmonth:~1,1%
set logday=%logdate:~8,2%
if "%logday:~0,1%" == " " set day=0%day:~1,1%
set logdatetime=%logyear%%logmonth%%logday%%loghour%%logmin%%logsec%
goto :eof

在你的代码中使用它,只需在你的游戏开始时调用它并使用返回的LOGDATETIME varialble

CALL :logdatetime
...
REN "D:\myfile.out" myfile-%LOGDATETIME%.out