Aktuelles Datum im Dateinamen

15

Ich habe Sicherungsskript eingeplant, das den Datenbankspeicherauszug macht. Wie kann ich den Datums- und Zeitstempel zum Dateinamen hinzufügen?

Ich spreche von Windows und CMD.

Bogdan Gusiev
quelle

Antworten:

21

In der Eingabeaufforderung und in den Batchdateien können Sie mit %date%und %time%Datum und Uhrzeit zurückgeben. Das Datum funktioniert einwandfrei, aber der zurückgegebene Zeitwert enthält Doppelpunkte, die für die Verwendung in Dateinamen unzulässig sind, aber es gibt eine Möglichkeit, diese zu entfernen.

Verwenden Sie etwas wie:

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

Dies erzeugt einen Dateinamen wie file_172215_01062009.txt

Update: Die folgenden Kommentare enthalten interessante Änderungen an diesem Befehl sowie einige potenzielle Probleme, die Sie vermeiden können.

aalaap
quelle
3
Toller kleiner Tipp. Übrigens, wenn Sie es umgekehrt machen, dh "file_20090601_172215", sehen Sie die Dateien in der richtigen Reihenfolge in einer alphabetischen Liste.
5
Sie können auch% time :: =% verwenden, um die Doppelpunkte zu entfernen.
user1686
2
Ich würde sagen, dass die Teilzeichenfolge für das Datum unterbrochen wird, sobald sich die Ländereinstellung des Systems von der beim Testen des Skripts unterscheidet. Es könnte sogar für den
Testbenutzer
3
Passen Sie Stunden 0 - 9 auf! CMD setzt das erste Zeichen der Stunde auf <LEERTASTE> anstatt auf 0. Der obige Befehl KOPIEREN hat Probleme, wenn Sie den Zieldateinamen nicht in Anführungszeichen setzen.
Evan Anderson
2
Beachten Sie, dass %DATE%und %TIME%Gebietsschema bewusst sind! Es bedeutet, dass Sie auf einer europäischen Maschine erhalten DD.MM.YYYY. Arrgh.
Pekka
14

Verwenden Sie die Umgebungsvariablen %DATE%und / oder %TIME, und ersetzen Sie optional die Zeichen, die in Dateinamen nicht zulässig sind. Verwenden Sie dazu %name:from=to%( %TIME::=%würde alle Doppelpunkte entfernen).

Theorie »echo% date%
2009-06-01

Theorie »Echo% Zeit%
16: 30: 41,46

Theorie »Echo% Zeit :: =%
163052,17

Theorie »Echo% Zeit :: =,%
16,30,58,68

Theorie »Echosicherung-% Datum% -% Uhrzeit :: = -%. zip
backup-2009-06-01-16-31-18,82.zip
user1686
quelle
1
wow, wisse nie über den: x = y Trick Bescheid. das ist wirklich cool.
Eugene Katz
1
+1 für den: = Trick, ich bin seit MS-Dos 1 in diesem Spiel und das ist das erste Mal, dass ich diesen Trick gesehen habe. Wäre noch besser, wenn Sie auch mehrere Zeichen ändern könnten !! :-)
shawty
Nun, es wurde nur Cmd.exe in der Windows NT-Reihe hinzugefügt ... Und wenn Sie mehrere Änderungen vornehmen möchten, haben Sie nur eine Kette von set tmp=%tmp:x=y%usw.
user1686
Der Inhalt von% DATE% (Anzahl der Dateien, Inhalt und Reihenfolge) ist länderspezifisch.
Symcbean
4

Die einzige zuverlässige Möglichkeit, ein geeignetes Datum zu erhalten, unabhängig von den regionalen Einstellungen, ist die Lösung von 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
quelle
1

Verwenden Sie die Variable% DATE% im Dateinamen.

Es gibt auch eine Variable% TIME%, die jedoch Zeichen enthält, die in einem Dateinamen nicht zulässig sind.

Hier ist ein Beispiel für das Schreiben einer Textzeile in eine neue Datei, in der die erstellte Datei ein Datum und eine Uhrzeit enthält.

echo "testfile" >> backup-%DATE%.txt
Frode Lillerud
quelle