Aktualna data w nazwie pliku

15

Zaplanowałem skrypt kopii zapasowej, który powoduje zrzut bazy danych. Jak mogę dodać znacznik daty do nazwy pliku?

Mówię o Windows i CMD.

Bogdan Gusiew
źródło

Odpowiedzi:

21

W wierszu polecenia i plikach wsadowych można użyć %date%i, %time%aby zwrócić odpowiednio datę i godzinę. Data działa dobrze, ale zwracana wartość czasu zawiera dwukropki, które są nielegalne w nazwach plików, ale istnieje sposób na ich usunięcie.

Użyj czegoś takiego:

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

Spowoduje to utworzenie nazwy pliku, takiej jak file_172215_01062009.txt

Aktualizacja: poniższe komentarze mają interesujące zmiany w tym poleceniu, a także niektóre potencjalne problemy, których można uniknąć.

aalaap
źródło
3
Świetna mała wskazówka. BTW, jeśli zrobisz to na odwrót, to znaczy: „plik_20090601_172215”, zobaczysz pliki w odpowiedniej kolejności na liście alfabetycznej.
5
Możesz również użyć% time :: =%, aby usunąć dwukropki.
user1686
2
Powiedziałbym, że podciąganie daty przestanie działać, gdy tylko ustawienia regionalne systemu będą się różnić od momentu przetestowania skryptu? Może nawet działać dla użytkownika testującego i działać jako skrypt uruchamiający ze względu na różne formaty wyświetlania dat ...
Oskar Duveborn
4
Uwaga na godziny 0–9! CMD ustawia pierwszy znak godziny na <SPACE>, a nie na 0. Powyższe polecenie COPY będzie miało problemy, jeśli nie podasz docelowej nazwy pliku w cudzysłowach.
Evan Anderson
2
Pamiętaj, że %DATE%i %TIME%są świadomi ustawień regionalnych! Oznacza to, że na europejskiej maszynie masz DD.MM.YYYY. Arrgh.
Pekka
14

Użyj zmiennych środowiskowych %DATE%i / lub %TIMEopcjonalnie podstawiając znaki, które nie są dozwolone w nazwach plików, używając %name:from=to%( %TIME::=%usuwa wszystkie dwukropki).

teoria »echo% data%
01.06.2009

teoria »echo% czas%
16: 30: 41,46

teoria »echo% czas :: =%
163052,17

teoria »echo% czas :: =,%
16,30,58,68

teoria »kopia zapasowa echa -% data% -% czas :: = -%. zip
backup-2009-06-01-16-31-18,82.zip
użytkownik1686
źródło
1
wow, nigdy nie wiem o sztuczce: x = y. to jest naprawdę świetne.
Eugene Katz
1
+1 za: = lewę, byłem w tej grze od MS-Dos 1 i po raz pierwszy Iv'e ją widział. Byłoby jeszcze lepiej, gdybyś mógł zmienić wiele znaków! :-)
shawty
Cóż, został dodany tylko do Cmd.exe w serii Windows NT ... A jeśli chcesz wykonać wiele zmian, po prostu łańcuch set tmp=%tmp:x=y%itp.
1686
Zawartość% DATE% (liczba zgłoszeń, treść i zamówienia) zależy od regionu.
symcbean
4

Jedynym niezawodnym sposobem uzyskania odpowiedniej daty niezależnie od ustawienia regionalnego jest rozwiązanie z 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
Eric Ouellet
źródło
1

W nazwie pliku użyj zmiennej% DATE%.

Istnieje również zmienna% TIME%, ale zawiera znaki niedozwolone w nazwie pliku.

Oto przykład wpisywania wiersza tekstu do nowego pliku, w którym utworzony plik ma datę i godzinę w nazwie.

echo "testfile" >> backup-%DATE%.txt
Frode Lillerud
źródło