2014-09-03 3 views
0

Я написал сценарий для удаления временных файлов. Скрипт создает журнал со всеми файлами удалены:CMD: Сохранить дату и время как имя файла

SET RemoveLog=RemoveLog_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%__%time:~0,2%_%time:~3,2%.txt (который будет создавать файл как RemoveLog_2014_03_09__09_12.txt)

и сохранить что-то в этом журнале я использую:

ECHO. >> %MEMLET%\%RemoveLog% (пустая строка в данном случае)

Это прекрасно работает, но на одном ноутбуке что-то еще происходит.

Файл сохраняется как RemoveLog_2014_03_09__ (09_12.txt отсутствующего)

И везде я >> %MEMLET%\%RemoveLog% в сценарии, в журнале в конце каждой строки я вижу 9_12.txt

Почему это происходит?

+0

ноутбук имеет другой формат даты –

+0

Как сохранить дату в файле, будет работать везде? – Solver

+1

Я ответил на очень похожий вопрос здесь: http://stackoverflow.com/a/22813968/2152082 – Stephan

ответ

1

Вы не получите ожидаемого, потому что %DATE% возвращает текущую дату, используя настройки окон для «короткого формата даты». Эта настройка полностью (бесконечно) настраивается.

Один пользователь может настроить свою систему, чтобы показать короткую дату как Wed030914; в то время как другой пользователь (даже в той же системе) может выбрать 09/03/2014. Это полный кошмар для программиста BAT.

Одним из возможных решений является использование WMIC. WMIC - это интерфейс командной строки WMI для WMI. WMIИнструментарий управления Windows является http://en.wikipedia.org/wiki/Windows_Management_Instrumentation

WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table 

возвращает дату в удобном виде непосредственно разобрать его с FOR.

Завершение разбора и положить кусочки вместе

FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year ^| findstr /r /v "^$"') DO (
    SET REMOVELOG=RemoveLog_%%F_%%D_%%A_%%B_%%C.txt 
) 
+0

у этого не будет начальных нулей за день, месяц, час, минуту, секунду. – Stephan

+0

отвечает на ваш вопрос, избегая проблемы с% date% format. Вам нужно построить свое решение вокруг него. Вы также можете попробовать 'WMIC OS получить localdateTime' –

Смежные вопросы