Ошибка добавления метки времени к имени файла, когда цифра первого часа равна нулю - PullRequest
2 голосов
/ 12 мая 2011

В окне 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 ]

2 голосов
/ 12 мая 2011

Вам нужно отредактировать ведущий пробел во времени, а также отредактировать двоеточие (:)

set FormatedTime=%Time: =0%

REN "D:\myfile.out" myfile-%DATE:/=%-%FormatedTime::=%.out
0 голосов
/ 12 мая 2011

Вы должны учитывать начальный пробел и локаль, формат даты и времени.

Я использую этот код, который (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

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