%DATE%
И %TIME%
переменные среды обеспечивают текущую дату и время на машинах Windows , в командной строке , так и внутри пакетного файла.
К сожалению, эти значения учитывают локали! Это означает, что, скажем, на немецкой машине, вы получите
26.1.2011
вместо того
2011-26-01
это испортит сортировку, если вы хотите использовать эту переменную в имени файла.
Есть ли какой-нибудь простой способ получить незнакомую по локали YYYY-MM-DD
строку даты в пакетном файле Windows?
На данный момент я работаю с этим довольно хитрым обходным путем:
for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k-%%j-%%i
echo %date%
но теперь это специфично для немецкой локали - очевидно, совершенно независимое решение было бы намного приятнее.
Рассматриваемая ОС - Server 2008. Я бы предпочел не использовать сторонний инструмент, если это вообще возможно.
for /f %%x in ('wmic os get localdatetime ^| findstr /b [0-9]') do @set X=%%x
это немного лучше. Здесь также есть более компактная версия , а именно в этом комментарии .findstr
решение намного лучше, так как в моем случае оригиналfor
(безskip
) повторяется 3 раза. Один раз для слова"LocalDateTime"
, второй раз для фактической даты и третий раз для пустого значения (может быть, разрыв строки?).Вот две строки, которые я использовал, которые, кажется, работают независимо от версии Windows или настроек местного времени:
Это установит переменную с именем% CUR_DATE% в следующем стандартном формате ISO:
Я попытался сделать его однострочным с &&, но, похоже, это не сработало, поэтому я прибег к двухстрочной версии. Надеюсь это поможет.
источник
Я использую этот трюк, чтобы получить UTC ..
Однако у этого есть побочный эффект краткого изменения всей системы на UTC. Это, вероятно, нормально на персональной рабочей станции, но не уверен, какое влияние окажет большой производственный сервер, который в любом случае должен быть установлен на UTC.
источник