1

Тема: CMD/BAT: получение формата дата-время для имени файла

Достаточно часто требуется создавать файлы (например, log-файлы) с указанием непосредственно в имени текущих даты-времени. Крайне желательно при этом, чтобы созданные файлы были правильно отсортированы (т.е., использовали т.н. «японский» порядок даты — Год-Месяц-День, не забывая про ведущие нули в одноцифровых месяцах и датах). Для этого можно использовать непосредственную работу с датой и временем: CMD/BAT: работа с датой и временем в командной строке. Но существует и более простой способ: свойство «.LocalDateTime» класса «Win32_OperatingSystem» возвращает дату-время в формате CIM_DATETIME, что, фактически, и требуется:

wmic.exe OS get LocalDateTime
LocalDateTime
20101021054545.868000+240

Лишнее достаточно просто обрезать, например:

@echo off
for /f "delims=." %%i in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%i
echo %sDateTime%
20101021055941

Из плюсов — полная независимость от региональных настроек и версий ОС: формат CIM_DATETIME един.

Автор идеи — amel27.

Источник

2

Re: CMD/BAT: получение формата дата-время для имени файла

Для машин без «wmic.exe»:

@echo off
setlocal

for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "javascript:try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(new String(new Enumerator(new ActiveXObject('WbemScripting.SWbemLocator').ConnectServer('.', 'root\\cimv2').ExecQuery('SELECT LocalDateTime FROM Win32_OperatingSystem WHERE Primary = True')).item().LocalDateTime).substr(0, 8 + 6))}; catch (e){}; close();" ^
    1^|more`
) do set sDateTime=%%i

echo %sDateTime%

endlocal
exit /b 0