Текущая дата в имени файла

15

У меня есть запланированный сценарий резервного копирования, который создает дамп базы данных. Как я могу добавить дату и время к имени файла?

Я говорю о Windows и CMD.

Богдан Гусиев
источник

Ответы:

21

В командной строке и командных файлах вы можете использовать %date%и %time%для возврата даты и времени соответственно. Дата работает нормально, но возвращаемое значение времени содержит двоеточия, которые недопустимы для использования в именах файлов, но есть способ удалить их.

Используйте что-то вроде:

COPY file.txt file_%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.txt

Это создаст имя файла, такое как file_172215_01062009.txt

Обновление: комментарии ниже содержат интересные поводы для этой команды, а также некоторые потенциальные проблемы, которые вы можете избежать.

aalaap
источник
3
Отличный маленький совет. Кстати, если вы сделаете это наоборот, то есть «file_20090601_172215», вы увидите файлы в правильном порядке в алфавитном списке.
5
Вы также можете использовать% time :: =% для удаления двоеточий.
user1686
2
Я бы сказал, что подстрока даты сломается, как только системный язык отличается от того, когда скрипт тестировался? Он может даже работать для тестирующего пользователя и сломаться как исполнитель сценариев из-за различных форматов отображения даты ...
Оскар Дювеборн
3
Остерегайтесь часов 0 - 9! CMD устанавливает первый символ часа в <SPACE>, а не в 0. У приведенной выше команды COPY будут проблемы, если вы не заключите имя файла назначения в кавычки.
Эван Андерсон
2
Обратите внимание, что %DATE%и %TIME%с учетом местных особенностей! Это значит, что на европейской машине вы получите DD.MM.YYYY. Arrgh.
Пекка
14

Используйте переменные окружения %DATE%и / или %TIME, необязательно заменяя символы, которые не допускаются в именах файлов, с помощью %name:from=to%( %TIME::=%удалит все двоеточия).

теория »эхо% дата%
2009-06-01

теория »эхо% время%
16: 30: 41,46

теория »эхо% времени :: =%
163052,17

теория »эхо% времени :: =,%
16,30,58,68

теория »резервное копирование эхо-% дата% -% время :: = -%. zip
резервное копирование 2009-06-01-16-31-18,82.zip
user1686
источник
1
вау, никогда не знаешь про трюк: x = y. это действительно круто
Евгений Кац
1
+1 за трюк: =, я был в этой игре со времен MS-Dos 1, и я впервые это увидел. Было бы еще лучше, если бы вы могли изменить несколько символов! :-)
Shawty
Ну, он был добавлен только к Cmd.exe в серии Windows NT ... И если вы хотите выполнить несколько изменений, просто цепочку set tmp=%tmp:x=y%и т. Д.
user1686
Содержимое% DATE% (количество полей, содержимое и порядок) зависит от региона.
symcbean
4

Единственный надежный способ получить соответствующую дату независимо от региональных настроек - это решение от foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
Эрик Оуэлл
источник
1

Используйте переменную% DATE% в имени файла.

Существует также переменная% TIME%, но она содержит символы, которые не допускаются в имени файла.

Вот пример записи строки текста в новый файл, в имени которого у созданного файла есть дата и время.

echo "testfile" >> backup-%DATE%.txt
Фроде Лиллеруд
источник