Поточна дата у назві файлу


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

Оновлення: У коментарях нижче є цікаві повороти цієї команди, а також деякі можливі проблеми, яких можна уникнути.


3
Чудова маленька порада. BTW, якщо ви зробите це навпаки, тобто "file_20090601_172215", ви побачите файли у правильному порядку в алфавітному списку.

5
Ви також можете використовувати% time :: =% для видалення колонок.
користувач1686

2
Я б сказав, що підстрока дат розірветься, як тільки локальна система буде відрізнятися від тестування сценарію? Він може навіть працювати для тестувального користувача та зламатись як біг сценарію через різні формати відображення дати ...
Оскар Дювеборн

4
Остерігайтеся годин 0 - 9! CMD встановлює перший символ години <SPACE>, а не 0. Команда COPY вище матиме проблеми, якщо ви не вкладете в лапки назву файла призначення.
Еван Андерсон

2
Зауважте, що %DATE%і %TIME%знають місцеві! Це означає, що на європейській машині ви потрапляєте DD.MM.YYYY. Arrgh.
Pekka

14

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

теорія »ехо% дата%
01.06.2009

теорія »ехо% час%
16: 30: 41,46

теорія »ехо% час :: =%
163052,17

теорія »ехо% час :: =,%
16,30,58,68

теорія »echo backup-% date% -% time :: = -%. zip
резервне копіювання-2009-06-01-16-31-18,82.zip

1
Нічого, ніколи не знаю про трюк: x = y. це дійсно круто.
Євген Кац

1
+1 для фокусу: =: я був у цій грі ще з MS-Dos 1, і тоді я вперше бачив цю гру. Було б навіть краще, якби ви могли також змінити кілька символів !! :-)
shawty

Ну, це було додано лише до Cmd.exe в серії Windows NT ... І якщо ви хочете виконати кілька змін, просто set tmp=%tmp:x=y%
створіть

Вміст% 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.