Обновление: теперь, когда наступил 2016 год, я бы использовал PowerShell для этого, если только для этого нет веской обратной совместимости, особенно из-за проблем с региональными настройками при использовании date
. См @ npocmaka это https://stackoverflow.com/a/19799236/8479
Какие операторы командной строки Windows я могу использовать, чтобы получить текущую дату и время в формате, который я могу поместить в имя файла?
Я хочу иметь файл .bat, который заархивирует каталог в архив с текущей датой и временем как часть имени, например Code_2008-10-14_2257.zip
,. Есть ли какой-нибудь простой способ сделать это независимо от региональных настроек машины?
Я действительно не против формата даты, в идеале это будет гггг-мм-дд, но все, что угодно, просто отлично.
Пока у меня есть это, которое на моей машине дает мне Tue_10_14_2008_230050_91
:
rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code
Я могу жить с этим, но это кажется немного неуклюжим. В идеале это было бы более коротким и имело формат, упомянутый ранее.
Я использую Windows Server 2003 и Windows XP Professional. Я не хочу устанавливать дополнительные утилиты для достижения этой цели (хотя я понимаю, что есть некоторые, которые будут делать хорошее форматирование даты).
[datetime]::now.tostring("yyyy-MM-dd")
Ответы:
См. Пакетный файл Windows (.bat), чтобы получить текущую дату в формате MMDDYYYY :
Если вы предпочитаете время в 24-часовом / военном формате, вы можете заменить вторую строку FOR следующим:
Если вы хотите указывать дату независимо от порядка дня / месяца в регионе, вы можете использовать «WMIC os GET LocalDateTime» в качестве источника, поскольку она находится в порядке ISO:
источник
For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)
на второй линии.For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))
Это возвращает значения типа «0001» и «0315», которые я предпочитаю в моих именах файлов.wmic
команды! Пока я только виделWMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
. Кроме того, чтобы попасть20120623-1619
в мой местный часовой пояс Амстердама, в одну строку:for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
%%a was unexpected at this time.
Регионально независимый разбор даты и времени
Формат вывода команды
%DATE%
иdir
зависит от региона и поэтому не является ни надежным, ни интеллектуальным. date.exe (часть UnxUtils ) предоставляет любую информацию о дате и времени в любом мыслимом формате. Вы также можете извлечь информацию о дате / времени из любого файла сdate.exe
.Примеры: (в cmd-скрипте используйте %% вместо%)
date.exe +"%Y-%m-%d"
2009-12-22
date.exe +"%T"
18:55:03
date.exe +"%Y%m%d %H%M%S: Any text"
20091222 185503: любой текст
date.exe +"Text: %y/%m/%d-any text-%H.%M"
Текст: 09/12/22 - любой текст - 18,55
Command: date.exe +"%m-%d """%H %M %S """"
07-22 "18:55:03"
Информация о дате / времени из справочного файла:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"
Использование его в сценарии CMD для получения информации о годе, месяце, дне и времени:
Использование его в сценарии CMD для получения метки времени в любом необходимом формате:
Извлечение даты / времени из любого справочного файла.
Добавление в файл информации о дате / времени:
date.exe является частью бесплатных инструментов GNU, которые не требуют установки.
ПРИМЕЧАНИЕ. Копирование
date.exe
в любой каталог в пути поиска может привести к сбою других сценариев, использующих встроеннуюdate
команду Windows .источник
date.exe
Кажется, встроенная Windows 8.1 зависит от локали. Она возвращает дату в формате dd / MM / yyyy в моей системе, если бы она не зависела от локали, я бы ожидала MM / dd / yyyy или yyyy-MM-dd Я не думаю, что этот ответ говорит о встроенном date.exe, а о какой-то сторонней версии.Еще два способа, которые не зависят от настроек времени (оба взяты из : Как получить данные / время независимо от локализации:) . И оба также получают день недели, и ни один из них не требует прав администратора!
MAKECAB - будет работать в КАЖДОЙ системе Windows (быстро, но создает небольшой временный файл) (скрипт foxidrive):
Больше информации о функции get-date .
ROBOCOPY - это не встроенная команда для Windows XP и Windows Server 2003, но ее можно скачать с сайта Microsoft . Но встроен во все, от Windows Vista и выше:
И еще три способа использования других языков сценариев Windows. Они дадут вам больше гибкости, например, вы можете получить неделю года, время в миллисекундах и так далее.
JScript / пакетный гибрид (необходимо сохранить как
.bat
). JScript доступен в любой системе от NT и выше, как часть Windows Script Host ( хотя может быть отключен через реестр, это редкий случай ):Гибрид VSCRIPT / BATCH ( возможно ли встроить и выполнить VBScript в пакетный файл без использования временного файла? ) В том же случае, что и в JScript, но гибридизация не так совершенна:
PowerShell - может быть установлен на любой машине с .NET - скачать с Microsoft ( v1 , v2 , v3 (только для Windows 7 и выше)). Он устанавливается по умолчанию на все, начиная от Windows 7 / Windows Server 2008 и выше:
Чтобы использовать его из командного файла:
Самоскомпилированный jscript.net/batch (никогда не видел машины с Windows без .NET, поэтому я думаю, что это довольно переносимо):
Логман Это не может получить год и день недели. Это сравнительно медленно, а также создает временный файл и основывается на отметках времени, которые logman помещает в свои файлы журнала. Это будет работать на всем от Windows XP и выше. Это, вероятно, никогда не будет использоваться никем - включая меня - но это еще один способ ...
Еще один способ с WMIC, который также дает неделю года и день недели, но не миллисекунды (для миллисекунд проверьте ответ foxidrive):
Использование TYPEPERF с некоторыми усилиями, чтобы быть быстрым и совместимым с различными настройками языка и максимально быстро:
MSHTA позволяет вызывать методы JavaScript, аналогичные методу JScript, продемонстрированному в # 3 выше. Имейте в виду, что свойства объекта Date в JavaScript, включающие значения месяца, пронумерованы от 0 до 11, а не от 1 до 12. Таким образом, значение 9 означает октябрь.
источник
makecab
: это работает путем создания файла с именем~.rpt
и поискаstring
внутри него, начиная сmakecab
строки, подобнойMakeCAB Report: Tue Sep 02 22:15:57 2014
. для меня эта команда не локализована, она не зависит от локали. Этот трюк полагается на это. Будем надеяться, что этого никогда не будет, иначе остерегайтесь!mshta
гибрида? :) Не возражаете, если я отредактирую ваш ответ и добавлю один? Кажется, это лучшая коллекция эзотерических решений, и кажется, что онаmshta
здесь.Вот вариант из alt.msdos.batch.nt, который работает локально независимо.
Поместите это в текстовый файл, например, getDate.cmd
Чтобы заставить код работать без сообщений об ошибках в stderr, мне пришлось добавить одинарные кавычки вокруг присваивания переменных для %% a, %% b и %% c. Мой языковой стандарт (PT) вызывал ошибки на одном этапе зацикливания / разбора, когда выполнялись такие вещи, как «set = 20». Кавычки дают токен (хотя и пустой) для левой части оператора присваивания.
Недостатком являются грязные имена переменных локали: 'yy', 'mm' и 'dd'. Но эй, кого это волнует!
источник
dd
,mm
аyy
в выводеecho:^|date
.date
даетGeben Sie das neue Datum ein: (TT-MM-JJ)
, гдеJJ
ломает твой сценарий (ожидаетYY
))Я использую это (опять же не зависит от региона (Великобритания))
источник
Первые четыре строки этого кода предоставят вам надежные переменные YY DD MM YYYY HH Min Sec в Windows XP Professional и выше.
источник
К сожалению, это не защищает от региональных настроек, но делает то, что вы хотите.
Удивительный материал, который вы можете найти в Википедии .
источник
Пожалуйста, используйте следующий скрипт, чтобы получить текущий день в командной строке:
источник
Другой способ ( кредит ):
Обратите внимание, что оба моих ответа здесь все еще зависят от порядка дня и месяца, которые определяются региональными настройками - не знаю, как обойти это.
источник
источник
http://www.dotnetperls.com/7-zip-examples
имеет некоторые хорошие моменты могут быть полезны для кого-то в будущем.Это на самом деле не короче, но может быть более гибким способом ( кредит ):
источник
Вот способ получить время даты в одной строке:
В США это выдаст «гггг-мм-дд ччмм». Различные региональные настройки приведут к разным выходам% date%, но вы можете изменить порядок токенов.
Если вы хотите другой формат, измените оператор echo, переставив токены или используя другие (или нет) разделители.
источник
Просто используйте эту строку:
источник
Короткий ответ :
Длинный ответ
источник
Одно-строчное решение Мэтью Джонсона для получения даты и времени в одну строчку красноречиво и полезно.
Однако для работы из пакетного файла требуется простая модификация:
источник
echo %date:/=-%%time::=-%
А вот аналогичный пакетный файл для порции времени.
--jeroen
источник
z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path”
но я хочу знать, как загрузить файлы в соответствии с датой создания . Любая помощь будет принята с благодарностью. Был задан вопрос по stackoverflow, но пока нет ответа. Пожалуйста, посмотрите на ссылку для деталей stackoverflow.com/q/32293517/3327081forfiles
.Я изменил ответ с помощью командного файла из vMax, чтобы он также работал с голландским языком.
Голландцы - стойкие , как мы - есть несколько изменений в
%date%
,date/t
иdate
что перерыв оригинал пакетного файла.Было бы неплохо, если бы некоторые люди могли проверить это и в других локалях Windows и сообщить о результатах.
Если в вашем местоположении произошел сбой пакетного файла, пожалуйста, включите вывод этих двух операторов в командную строку:
echo:^|date
date/t
Это пример вывода, который вы должны получить из командного файла:
Вот пересмотренный код с комментариями о том, почему:
--jeroen
источник
jj-mm-aaaa
для журнала, мой, анни? Может быть, итальянцыgg/mm/aaaa
для giorno, mese, anno? Немцыtt.mm.jjjj
за таг, монат, яр? Но потом: я думаю, что в большинстве стран используется только несколько языков. Как и в Нидерландах, на самом деле Windows часто будет английской или голландской, не намного. Достаточно хорошо для меня.jj
и не требует 4-значного года), но используетshift
для отбрасывания дня, напримерMon
илиma
. Просто другой.(TT-MM-JJ)
,date/t
вывод23.06.2012
. / cc @Arjanreg query "HKCU\Control Panel\International" /vShortDate
. Остерегайтесь во время тестирования: для открытой командной строке изменения , что панель управления установкой также изменяет формат , используемый для отображения даты (для обоихdate
иdate /t
иecho %date%
), но на Windows 7 НЕ изменяет формат новой даты! Как меняю короткий формат даты вYY/MM/dd
, получает меня:The current date is: 12/06/23 Enter the new date: (mm-dd-yy)
. Открытие новой командной строки исправляет это.reg query "HKCU\Control Panel\International" /v sShortDate
.Вот что я использовал:
Если вам нужны дополнительные идеи для автоматизации резервного копирования в архивы 7-Zip, у меня есть бесплатный / открытый проект, который вы можете использовать или просмотреть для идей: http://wittman.org/ziparcy/
источник
У меня была аналогичная проблема. У меня автоматическая ежедневная загрузка с FTP-сервера зашифрованного файла. Я хотел расшифровать файл с помощью gpg, переименовать файл в текущую дату (формат ГГГГММДД) и поместить дешифрованный файл в папку для правильного отдела.
Я просмотрел несколько предложений по переименованию файла в соответствии с датой, и мне не повезло, пока я не наткнулся на это простое решение.
Это работало отлично (то есть, имя файла выходит как «2011-06-14.txt»).
(Источник)
источник
Функция, которая основана на
wmic
:Внешняя сторона: независимый от региона. Даунсайд: только системные администраторы могут запускать wmic.exe.
Применение:
Это повторяет строку как это:
Обратите внимание, что параметры функции являются out-Parameters, то есть вы должны указывать имена переменных вместо значений.
Все параметры являются необязательными, поэтому
call:Now Y M
допустим вызов, если вы хотите получить только год и месяц.источник
http://sourceforge.net/projects/unxutils/files/
Найдите в ZIP-файле что-то с именем «Date.exe» и переименуйте его в «DateFormat.exe» (чтобы избежать конфликтов).
Поместите это в свою папку system32 Windows.
У этого есть много опций «вывода даты».
Для помощи используйте
DateFormat.exe --h
Я не уверен, как вы поместите его вывод в переменную окружения ... используя SET.
источник
Региональное независимое решение, генерирующее формат даты ISO:
Что еще можно оптимизировать: другие процессы могут запутаться, если использовать формат даты за короткий период, пока он изменяется. Таким образом, анализ выходных данных в соответствии с существующей строкой формата может быть «безопаснее», но будет более сложным
источник
источник
Учитывая известную местность, для справки в функциональном виде. На
ECHOTIMESTAMP
шоу вызова , как получить временную метку в переменную (DTS
в данном примере) .И сохраненный в файл timestamp.bat, вот вывод:
источник
(yy)yy年m月d日 hh:mm
- нет ведущих нулей. (yy) можно игнорировать, так как у нас год из двух цифр или год из четырех цифр. Но обратите внимание на одну вещь: формат даты и времени может быть изменен для каждой машины.systeminfo
в CLI и дайте мне знать, что вы видитеSystem Locale
. Для запуска программы требуется время, но, возможно, результат локали может быть кэширован и впоследствии использован для индексации формата метки времени.В Windows 7 этот код работает для меня:
источник
independent of the regional settings of the machine
Я отмечаю, что o / p не просил независимое от региона решение. Мое решение для Великобритании, хотя.
Это простейшее возможное решение, решение в одну строку, для использования в пакетном файле:
источник
...particularly because of the regional settings issue with using date
. Btw. Ваше решение такое же, как двадцать других ответов.echo %date:/=-%
Я знаю, что уже упоминалось множество способов. Но вот мой способ разбить его, чтобы понять, как это делается. Надеюсь, это полезно для тех, кто любит пошаговый метод.
источник
independent of the regional settings of the machine