Windows:Batch / DOS-Box: aktuelles Datum und Uhrzeit für Datei- oder Verzeichnisnamen verwenden
Aus znilwiki
Zum Beispiel bei Dateisicherungen per Skript / Batch ist es praktisch, das aktuelle Datum und Uhrzeit in Batch-Dateien verwenden zu können.
Auch bei Ausgaben in Log-Dateien macht sich das gut.
Simpel-Ausgabe
Die 08/15 Ausgabe besteht aus dem Inhalt der beiden Umgebungsvariablen
%TIME% %DATE%
Per echo
in einer Eingabeaufforderung sieht das so aus:
Wie Ihr seht habe ich auch gleich einen Ordner mit dem aktuellen Datum angelegt.
Leider geht das mit der Uhrzeit schon nicht mehr - da sind Doppelpunkte drin, die darf es in Dateinamen nicht geben.
Aber auch dafür gibt es eine Lösung - siehe nächsten Abschnitt:
Getrennte Ausgabe von Tag, Monat, Jahr, Stunde, Minute und Sekunde
Was leider in der aktuellen Hilfe praktisch nicht mehr zu finden ist: Windows kann die Ausgabe von Umgebungsvariablen Formatieren.
Das können wir nutzen um die Ausgabe von %TIME%
und %DATE%
in ihre Einzelteile zu zerlegen:
Jahr: %date:~-4% Monat: %date:~-7,2% Tag: %date:~-10,2% Stunden: %time:~-11,2% Minuten: %time:~-8,2% Sekunden: %time:~-5,2%
Ein
%date:~-4%-%date:~-7,2%-%date:~-10,2%---%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
gibt uns Datum und Uhrzeit in einer Verzeichnis- und Dateinamen kompatiblen Version aus - die dann schön nach Datum sortiert wird, mit
mkdir %date:~-4%-%date:~-7,2%-%date:~-10,2%---%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
erstellen wir uns ein Verzeichnis damit:
--Bernhard Linz (Diskussion) 12:20, 11. Mai 2012 (CEST)
Fehler durch Leerzeichen
Ich habe da gerade noch einen Fehler gefunden - die Uhrzeit oder das Datum ist bei den Zahlen von 1 bis 9 nur einstellig.
Wir bekommen also ein
echo ##%TIME%## ## 9:45:35,88##
und damit auch ein
echo =>%time:~-11,2%-%time:~-8,2%-%time:~-5,2%<= ## 9-45-35##
Beim Datum ist es das selbe. Nun haben wir plötzlich Leerzeichen in den Dateinamen.
Lösung1: Die Namen in der Batch in " " packen und damit die Leerzeichen übergeben
Lösung2: Aus allen Leerzeichen hinterher 0 - machen:
set TEST=%date:~-4%-%date:~-7,2%-%date:~-10,2%-%time:~-11,2%-%time:~-8,2%-%time:~-5,2% echo ##%TEST%## setlocal enabledelayedexpansion set TEST=!TEST:^ =0! setlocal disabledelayedexpansion echo ##%TEST%##
Ausgabe:
##2012-05-12- 1-47-00## ##2012-05-12-01-47-00##
er füllt die Leerzeichen mit der Zahl 0 !
--Bernhard Linz (Diskussion) 01:48, 12. Mai 2012 (CEST)