Data corrente nel nome del file


15

Ho programmato uno script di backup che rende il dump del database. Come posso aggiungere il timestamp della data al nome del file?

Sto parlando di Windows e CMD.

Risposte:


21

Nel prompt dei comandi e nei file batch, è possibile utilizzare %date%e %time%per restituire rispettivamente la data e l'ora. La data funziona bene, ma il valore dell'ora restituito contiene due punti, che sono illegali per l'uso nei nomi di file, ma c'è un modo per rimuoverli.

Usa qualcosa come:

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

Questo produrrà un nome file come file_172215_01062009.txt

Aggiornamento: I commenti qui sotto hanno interessanti colpi di scena su questo comando e alcuni potenziali problemi che puoi evitare.


3
Piccolo suggerimento. A proposito, se lo fai al contrario, ovvero: "file_20090601_172215", vedrai i file nell'ordine corretto in un elenco alfabetico.

5
Puoi anche usare% time :: =% per rimuovere i due punti.
user1686

2
Direi che la sottostringa della data si spezzerebbe non appena le impostazioni locali del sistema differiscono da quando lo script è stato testato? Potrebbe persino funzionare per l'utente di test e rompersi come runner dello script a causa dei diversi formati di visualizzazione della data impostati ...
Oskar Duveborn,

3
Attenzione ore 0-9! CMD imposta il primo carattere dell'ora su <SPACE>, anziché su 0. Il comando COPIA sopra avrà problemi se non racchiudi il nome del file di destinazione tra virgolette.
Evan Anderson,

2
Si noti che %DATE%e %TIME%sono a livello locale! Significa che su una macchina europea, ottieni DD.MM.YYYY. Arrgh.
Pekka,

14

Utilizzare le variabili di ambiente %DATE%e / o %TIME, sostituendo facoltativamente i caratteri non consentiti nei nomi di file, utilizzando %name:from=to%( %TIME::=%rimuoverebbe tutti i due punti).

teoria »eco% data%
2009-06-01

teoria »eco% tempo%
16: 30: 41,46

teoria »eco% tempo :: =%
163052,17

teoria »eco% tempo :: =,%
16,30,58,68

teoria »backup eco-% data% -% tempo :: = -%. zip
backup 2009-06-01-16-31-18,82.zip

1
wow, non so mai del trucco: x = y. è davvero bello.
Eugene Katz,

1
+1 per il: = trucco, ci sono stato in questo gioco da MS-Dos 1 ed è la prima volta che Iv lo vede. Sarebbe ancora meglio se potessi cambiare anche più caratteri !! :-)
shawty

Bene, è stato aggiunto solo a Cmd.exe nella serie Windows NT ... E se vuoi eseguire più modifiche, basta avere una catena di set tmp=%tmp:x=y%ecc.
user1686,

Il contenuto di% DATE% (numero di archivi, contenuto e ordinamento) sono specifici della locale.
symcbean

4

L'unico modo affidabile per ottenere la data appropriata indipendentemente dall'impostazione regionale è la soluzione di 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

Usa la variabile% DATE% nel nome del file.

Esiste anche una variabile% TIME%, ma contiene caratteri non consentiti in un nome file.

Ecco un esempio di scrittura di una riga di testo in un nuovo file, in cui il file creato ha una data e un'ora nel suo nome.

echo "testfile" >> backup-%DATE%.txt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.