В пакетном скрипте Windows (Windows XP) мне нужно отформатировать текущую дату и время для последующего использования в именах файлов и т. Д.
Это похоже на вопрос переполнения стека Как добавить дату в пакетных файлах , но также со временем.
У меня есть это до сих пор:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
который дает:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
Можно ли как-то разрешить однозначный час в% TIME%, чтобы я мог получить следующее?
2009_07_28__08_36_01
windows
datetime
formatting
batch-file
Laurie
источник
источник
datetimef
переменной и вместо этого поставить 0. На вашем примере:SET datetimef=%datetimef: =0%
Ответы:
Я закончил с этим сценарием:
:: На WIN2008R2, например, мне нужно было сделать ваш «установленный месяц =% date: ~ 3,2%», как показано ниже :: в противном случае 00 появляется для MONTH
источник
источник
Вот как я генерирую имя файла журнала (на основе http://ss64.com/nt/syntax-getdate.html ):
источник
Я обычно делаю это таким образом, когда мне нужна строка даты / времени:
Это для немецкого формата даты / времени (дд.мм.гггг чч: мм: сс). По сути, я объединяю подстроки и, наконец, заменяю все пробелы нулями.
Краткое объяснение того, как работают подстроки:
Таким образом, чтобы получить год от даты, такой как «29.03.2018», используйте:
источник
Если установлен PowerShell, вы можете легко и надежно получить дату / время в любом формате, который вам нравится, например:
Конечно, в наше время PowerShell всегда устанавливается, но в Windows XP вы, вероятно, захотите использовать эту технику, только если ваш пакетный скрипт используется в известной среде, где вы знаете, что PS доступен (или проверьте в своем пакетном файле, если PowerShell доступен ...)
Вы можете разумно спросить: зачем вообще использовать командный файл, если вы можете использовать PowerShell, чтобы получить дату / время, но я думаю, что есть несколько очевидных причин: (a) вы не очень хорошо знакомы с PowerShell и по-прежнему предпочитаете делать большинство По-старому, с пакетными файлами, или (b) вы обновляете старый скрипт и не хотите переносить все это на PS.
источник
Сегодня я столкнулся с этой проблемой и решил:
Он заменяет пробелы на 0 и, в основном, на ноль в час.
После некоторого быстрого поиска я не узнал, требовались ли для него расширения команд (все еще работал с SETLOCAL DISABLEEXTENSIONS).
источник
:
)?echo %TIME: =:%
но если это не так, возможно, попытаться избежать:
с^
подобнымecho %TIME: =^:%
(что также работает для меня).Как уже было отмечено, синтаксический анализ даты и времени полезен только в том случае, если вы знаете формат, используемый текущим пользователем (например, MM / dd / yy или dd-MM-yyyy, просто чтобы назвать два). Это может быть определено, но к тому времени, когда вы выполните все операции выделения и анализа, у вас все равно останется некоторая ситуация, когда используется непредвиденный формат, и потребуется больше настроек.
Вы также можете использовать некоторую внешнюю программу, которая будет возвращать слаг даты в выбранном вами формате, но у этого есть недостатки, связанные с необходимостью распространения утилиты вместе с вашим скриптом / пакетом.
Существуют также пакетные приемы, использующие часы CMOS довольно сырым способом, но это слишком близко к оголенным проводам для большинства людей, а также не всегда предпочтительное место для получения даты / времени.
Ниже приведено решение, которое позволяет избежать вышеуказанных проблем. Да, это создает некоторые другие проблемы, но для моих целей я обнаружил, что это самое простое, понятное и портативное решение для создания меток даты в файлах .bat для современных систем Windows. Это всего лишь пример, но я думаю, вы увидите, как изменить другие форматы даты и / или времени и т. Д.
источник
reg query "HKCU\Control Panel\International" /v sShortDate
часть, не изменяя настройки реестра (упражнение оставлено читателю!).Следующее может быть не прямым ответом, а близким?
По крайней мере, это может быть вдохновляющим.
источник
Если вам не нужен этот формат:
Затем вы можете использовать следующие 3 строки кода, которые используют% date% и% time%:
Примечание. Символы
/
и:
удаляются, а символ.
и пробел заменяются подчеркиванием.Пример выходных данных (взятый в среду, 5/5/15 в 12:49 с 50 секундами и 93 миллисекундами):
источник
источник
offset:length
Форматирование поддерживается сSET
командой в Windows , не позволит вам с планшетом ,0
как вам кажется, быть заинтересованы в.Тем не менее, вы можете написать скрипт BATCH, чтобы проверить, что час меньше,
10
идополнить его другой
echo
строкой.По этой ссылке вы найдете информацию о
SET
команде .Вы также можете перейти на другие методы программирования, чтобы получить здесь.
В Unix Bash (доступно с Cygwin для Windows) довольно просто сказать:
И это всегда правильно.
источник
Я сделал это так:
источник
Первая строка всегда выводит в этом формате
соотношения часового пояса: 20150515150941.077000 + 120
Это оставляет вас просто отформатировать выходные данные в соответствии с вашими пожеланиями.
источник
Этот файл bat (сохранить как datetimestr.bat) создает строку datetime 3 раза: (1) длинную строку datetime с днем недели и секундами, (2) короткую строку datetime без них и (3) короткую версию кода.
Чтобы отдать должное, я объединил концепции Питера Мортенсена (18 июня 14 года в 21:02) и Опелло (25 августа 2011 года в 14:27).
Вы можете написать это намного короче, но эта длинная версия облегчает чтение и понимание кода.
источник
Я действительно новичок в пакетных файлах, и это мой код! (Я не уверен почему, но я не мог объединить дату / t и время / t вместе, и я не мог использовать % date% и % time% напрямую без переменной ...)
Это как бы повторно используется другими (вопрос заключался в том, чтобы получить отформатированную дату для использования в качестве имени файла).
источник
Есть еще один простой способ сделать это:
источник
Для создания
YYYY-MM-DD hh:mm:ss
(24-часовой) метки времени я использую:источник
%TIME%
и%DATE%
переменные используют один и тот же формат , какTIME
иDATE
команды, соответственно. В моей системе переменные не соответствуют моим региональным настройкам.Этот пакетный скрипт будет делать именно то, что хочет OP (протестировано на Windows XP SP3).
Я также использовал этот хитрый трюк в реестре, описанный ранее «jph», который, IMHO, является самым простым способом получения 100% согласованного форматирования даты в
"yyyy_MM_dd"
любой системе Windows, новой или старой. Изменение одного значения реестра для этого является мгновенным временным и тривиальным; он длится всего несколько миллисекунд, прежде чем он немедленно возвращается обратно.Дважды щелкните по этому пакетному файлу для мгновенной демонстрации, появится окно командной строки и отобразится ваша метка времени. , , , ,
источник
источник
Создайте файл с именем «search_files.bat» и поместите содержимое ниже в файл. Затем дважды щелкните по нему. Временная переменная% THH% была введена для надлежащей обработки AM. Если в первых 2 цифрах времени присутствует 0, Windows игнорирует оставшуюся часть имени файла LOG.
источник
Мне нравится короткая версия поверх @Lorax, но для других языковых настроек она может немного отличаться.
Например, в настройках немецкого языка (с натуральным форматом даты: dd.mm.yyyy) запрос месяца должен быть изменен с 4,2 до 3,2:
источник
Это мои 2 цента за
datetime string
. НаMM DD YYYY
системах переключаются первая и вторая%DATE:~
записи.источник
Я попробовал принятый ответ, и он работает довольно хорошо. К сожалению, американский формат времени выглядит как H: MM: SS.CS, а отсутствующий 0 на передней панели вызывал проблемы с синтаксическим анализом до 10 часов утра. Чтобы преодолеть это препятствие, а также разрешить разбор большинства форматов мирового времени, я придумал эту простую процедуру, которая, кажется, работает достаточно хорошо.
Приятно, что в этой подпрограмме вы передаете строку времени в качестве первого параметра, а имя переменной среды, в которой вы хотите указать время (в сантисекундах), в качестве второго параметра. Например:
(*Крис*)
источник
Может быть, что-то вроде этого:
источник
В подобных ситуациях используется простой стандартный подход к программированию: вместо огромных усилий по анализу неизвестного объекта просто сохраните текущую конфигурацию, сбросьте ее до известного состояния, извлеките информацию и затем восстановите исходное состояние. Используйте только стандартные ресурсы Windows.
В частности, форматы даты и времени хранятся в разделе реестра HKCU \ Control Panel \ International \ in [значения MS] "values": "sTimeFormat" и "sShortDate". Reg - консольный редактор реестра, включенный во все версии Windows. Для изменения ключа HKCU повышенные привилегии не требуются
Просто, понятно и должно работать для всех регионов.
По причинам, которые я не понимаю, сброс значения «sShortDate» вступает в силу немедленно в окне консоли, но сброс очень похожего значения «sTimeFormat» НЕ вступает в силу, пока не откроется новое окно консоли. Однако единственное, что можно изменить, - это разделитель - позиции цифр являются фиксированными. Аналогично, маркер времени «HH» должен предшествовать начальным нулям, но это не так. К счастью, обходные пути просты.
источник
sTimeFormat
формата времени бесполезен . Нет. Поскольку это влияет на последующее приглашение консоли, примените его, используяfor /f "delims=" %%G in ('cmd /C echo SET "DateTime=%%date%%__%%time%%"') do %%G
В этом сценарии используется интерфейс WMI, доступ к которому осуществляется через первичный инструмент WMIC, который является неотъемлемой частью Windows начиная с Windows XP Professional (также поддерживается версия Home, но по умолчанию инструмент не устанавливается). Сценарий также реализует обход отсутствующего инструмента WMIC, создавая и вызывая vbscript WSH для доступа к интерфейсу WMI и записи в консоль времени, выводимого в том же формате, что и инструмент WMIC.
источник
Хорошим трюком в одну строку, чтобы избежать раннего расширения переменной, является использование
cmd /c echo ^%time^%
источник
источник
Для очень простого решения для числовой даты для использования в именах файлов используйте следующий код:
источник
Разделите результаты команды date по косой черте, после чего вы можете переместить каждый из токенов в соответствующие переменные.
источник