У нас есть пакетное задание, которое выполняется каждый день и копирует файл в папку для получения. Я также хочу взять копию этого файла и поместить ее в папку архива с именем файла
yyyy-MM-dd.log
Какой самый простой способ сделать это в пакетном задании Windows?
Я в основном ищу эквивалент этой команды Unix:
cp source.log `date +%F`.log
windows
batch-file
cmd
timestamp
Эоин Кэмпбелл
источник
источник
Ответы:
Но это зависит от региона. Я не уверен, что
%DATE%
он локализован или зависит от формата, указанного для короткой даты в Windows.Вот независимый от локали способ извлечь текущую дату из этого ответа , но он зависит от
WMIC
иFOR /F
:источник
2014-5.-01
(когда это будет2014-05-26
). Так что будьте очень осторожны, если вы публикуете скрипты, содержащие это!%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
Это сработало для меня и было безопасным для имени файла решением (хотя оно генерирует формат MM-dd-YYYY):
Первая команда принимает ДАТУ и заменяет ее
/
на-
, берет ВРЕМЯ, заменяет ее:
на-
и объединяет их в формат ДАТА @ ВРЕМЯ. Второйset
оператор удаляет пробелы, а третийset
Заменяет,
с.
и добавляет.jpg
расширение.Приведенный выше код используется в небольшом скрипте, который извлекает изображения с IP-камеры безопасности для дальнейшей обработки:
источник
10-12-2014@14-22-59,44.jpg
с запятой перед миллисекундамиset SAVESTAMP=%SAVESTAMP:,=.%.jpg
передecho
утверждением. Если это сработает, я обновлю ответ.08.06.2016@15-42-20,33.jpg
на моем немецком ноутбуке иWed06-08-2016@15-43-45.89.jpg
моем английском.yyyy-MM-dd
ТОЛЬКО для французского языка (Франция) будьте осторожны, потому что
/
в дате отображается:Что касается нашей проблемы с файлом журнала, вот мое предложение ТОЛЬКО для французского языка :
источник
"_0:00"
(символ подчеркивания - это пробел)Вот независимое от локали решение (скопируйте в файл с именем SetDateTimeComponents.cmd):
Я помещаю все свои сценарии .cmd в одну папку (% SCRIPTROOT%); любой скрипт, которому требуются значения даты / времени, вызовет SetDateTimeComponents.cmd, как в следующем примере:
Как показывает пример, вы можете вызывать SetDateTimeComponents.cmd всякий раз, когда вам нужно обновить значения даты / времени. Скрытие сценария анализа времени в собственном файле SetDateTimeComponents.cmd - хороший способ скрыть некрасивые детали и, что более важно, избежать опечаток.
источник
prompt $d $t
возвращает 30.05.2016 15: 35: 56,93 в моей системе.Поскольку идея разорвать
%DATE%
и%TIME%
разделить и снова собрать их вместе кажется в лучшем случае хрупкой, вот альтернатива, в которой используется одинарный лайнер PowerShell:Ссылка на
get-date
это здесь , с параметрами форматирования , как для .NET-стиля и UNIX-стиле.источник
Я часто использую это и помещаю все в одну команду копирования. Следующий файл example.txt копируется как example_YYYYMMDD_HHMMSS.txt, и, конечно, вы можете изменить его в соответствии с вашим предпочтительным форматом. Кавычки необходимы только в том случае, если в спецификации файла есть пробелы. Если вы хотите повторно использовать одну и ту же дату / время, вам нужно сохранить ее в переменной.
источник
Это гарантирует, что вывод представляет собой двузначное значение ... вы можете изменить вывод по своему вкусу и протестировать, не комментируя раздел диагностики. Наслаждайтесь!
(Я многое позаимствовал с других форумов ...)
источник
Создайте файл с текущей датой в качестве имени файла (например, 2008-11-08.dat)
С текущей датой, но без знака "-" (например, 20081108.dat)
источник
Может быть, это поможет:
или же
источник
Я собрал небольшую программу на C, чтобы распечатать текущую временную метку (безопасная для локали, без плохих символов ...). Затем я использую команду FOR, чтобы сохранить результат в переменной среды:
Вот ссылка:
https://github.com/HarryPehkonen/dos-timestamp
источник
Я знаю, что эта ветка устарела, но я просто хочу добавить ее сюда, потому что она очень помогла мне, пытаясь разобраться во всем этом и очистить ее. Самое приятное в этом то, что вы можете поместить его в цикл для постоянно работающего командного файла. Журнал работоспособности сервера или что-то в этом роде. В любом случае я использую его для этого. Надеюсь, когда-нибудь это кому-нибудь поможет.
источник
ERROR : Invalid Parameter #12 : "/LOG:C:\opt\Sync_08.10.2020_16:27:39.log"
В качестве исправления вместо этого я использовал тире:set FreshTime=%hour%-%min%-%secs%
Вы можете просто определить текущий локальный формат и получить дату в своем формате, например:
источник
Я знаю, что это старый пост, но есть гораздо более простой ответ (хотя, возможно, он работает только в более новых версиях Windows). Просто используйте параметр / t для команд DATE и TIME dos, чтобы отображать только дату или время, а не предлагать вам их установить, например:
источник
1) Вы можете загрузить GNU coreutils, который поставляется с датой GNU
2) вы можете использовать VBScript , который упрощает манипуляции с датой в Windows:
Запустите сценарий как:
источник
Это хорошо работает с (моей) немецкой локалью, должно быть возможно настроить ее под свои нужды ...
источник
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
работает и для португальского местоположения! Я имею в виду ГГГГММДДДля развертывания больших zip-файлов я использую четверть часа. Никто на этой странице раньше не упоминал об этом, поэтому я помещу сюда свой небольшой скрипт:
Он еще не обнуляет четверть часа с полуночи до 5 утра, но все же делает так, чтобы вы могли выпускать штампы несколько раз в день с небольшими столкновениями.
Надеюсь, это поможет.
источник
использовал предложение Мартина с небольшой настройкой, чтобы добавить отметку времени к имени файла:
За 10:17:21 23.10.2019 Результат такой:
источник