Windows:Batch / DOS-Box: aktuelles Datum und Uhrzeit für Datei- oder Verzeichnisnamen verwenden

Aus Znilwiki
Wechseln zu: Navigation, Suche

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:
Batch-DatumundUhrzeit-001.png

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:
Batch-DatumundUhrzeit-002.png

--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 !

Important.png
Hinweis: Das Umwandeln aller Leerzeichen in eine 0 funktioniert nur innerhalb einer Batch-Datei. Man kann es NICHT in der Eingabeaufforderung testen! Kopiert das Beispiel in eine Textdatei und speichert diese als .bat oder .cmd und ruf diese dann auf - dann geht es.

--Bernhard Linz (Diskussion) 01:48, 12. Mai 2012 (CEST)


Kommentare

Kommentare


194.166.106.203

1554 Tage zuvor
Punkte 0+-

Super Lösung, danke für den Tipp, vor allem auch das Umwandeln der Leerstelle in eine Null !

Günter

192.130.224.25

1461 Tage zuvor
Punkte 0+-
unter Windows 7 will das nicht mehr so recht funktionieren, das steht dann "set TEST= Missing operator"

192.130.224.25

1461 Tage zuvor
Punkte 0+-
sorry "missing operand"

BLinz

1460 Tage zuvor
Punkte 0+-

Also ich habe das unter Windows 7 und unter Windows Server 2008 R2 ohne Probleme am laufen.

Das funktioniert nur innerhalb einer Batchdatei, nicht beim Schritt für Schritt ausführen in der Eingabeaufforderung

Hardy

479 Tage zuvor
Punkte 0+-

Guten morgen an alle, bischen spaet ... aber doch ... ich hab's so gemacht

@ECHO OFF

http://znil.…en_verwenden
@ --Bernhard Linz (Diskussion) 01:48, 12. Mai 2012 (CEST)
Original von obiger Adresse
set TEST=%date:~-4%-%date:~-7,2%-%date:~-10,2%-%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
DATE YYYY-MM-DD
set DATE=%date:~-4%-%date:~-7,2%-%date:~-10,2%
DATE DD-MM-YYYY

set DATE=%date:~-10,2%-%date:~-7,2%-%date:~-4%

TIME HH-MM-SS

set TIME=%time:~-11,2%-%time:~-8,2%-%time:~-5,2%

echo %DATE% %TIME%

if NO leading ZERO is present, one will be added

setlocal enabledelayedexpansion set TIME=!TIME:^ =0! setlocal disabledelayedexpansion

echo %DATE% %TIME%

Hardy

479 Tage zuvor
Punkte 0+-

Die folgende batch erzeugt eine Datei mit folgendem Namen:

Test 2015-10-03 01-30-07.txt

@ECHO OFF

google-de: batch-datei datum im Dateinamen
http://znil.…en_verwenden
http://www.a…rn-4664.html

set DATE=%date:~-4%-%date:~-7,2%-%date:~-10,2%

set TIME=%time:~-11,2%-%time:~-8,2%-%time:~-5,2%

setlocal enabledelayedexpansion set TIME=!TIME:^ =0! setlocal disabledelayedexpansion

set NameReportFile="G:\DatumUhrzeit\"Test  %DATE%  %TIME%.txt""

echo. >> "%NameReportFile%"

Man muesste nun nur noch eine Variable fuer den Namen definieren und eine kleine Eingabemaske ...

Himmel auf Erden ... oder Bastler's Heaven

Greez

Hardy

Thomas

96 Tage zuvor
Punkte 0+-

Bei mir unter Windows 7 x64 Englisch klappt es auch nicht!

Ich bekomme als Datum + Uhrzeit am 20.10.2016 um 07:22 Datum --20-0--0-

Uhrzeit 07-07-07

Thomas

96 Tage zuvor
Punkte 0+-

Sorry. Vergesst den Kommentar hier drüber! Das Problem bestand nur, wenn man das mehrfach laufen lies. Dann wurde aus dem schon formatierten DATE nochmal formatiert.

Habe das in SET DATESTAMP=... und SET TIMESTAMP=... umbenannt dann kann das auch mehrfach in einer Dos-Box aufgerufen werden.
Kommentar hinzufügen:
Gebe hier einen Kommentar ein. Du kannst einen beliebigen Namen oder eine Email-Adresse als Namen angeben.

Wenn du dich einloggst wird automatisch dein Benutzername genommen.
Du kannst KEINE Links hier posten - das wurde wegen anhaltender Werbung deaktiviert. Sobald ein '''http://''' im Text vorkommt wird der Kommentar verworfen Alle anderen Steuerzeichen oder Funktionen wie < br > werden ausgefiltert - zum Posten von Quelltexten ist diese Funktion hier nicht geeignet.

Falls du dringendere Fragen hast kannst du auch das Support-System von znil.net nutzen unter support.znil.net