Plattformunabhängiges Datum in Batch
Hallo,
wir haben hier mehrere verschiedene Betriebssysteme am Laufen. Darunter Windows 2000, Windows NT 4.0, Windows Server 2003, Windows XP...
Derzeit muß ich mehrere Batch-Dateien schreiben, die sich möglichst unter allen Systemen gleich verhalten. So z.B. beim Datum:
for /f "delims=" %%i in ('date /t') do set datum=%%i && echo %datum:~-12,10%
Das geht und liefert mir immer das Datum im Format: DD:MM:YYYY
Geht dies auch kürzer?
Ich würde gerne die &&-Verknüfung noch weglassen, allerdings geht dann der Tilde-Operator nicht mehr.
Wer kann helfen?
Grüße,
slickwilly2000
wir haben hier mehrere verschiedene Betriebssysteme am Laufen. Darunter Windows 2000, Windows NT 4.0, Windows Server 2003, Windows XP...
Derzeit muß ich mehrere Batch-Dateien schreiben, die sich möglichst unter allen Systemen gleich verhalten. So z.B. beim Datum:
for /f "delims=" %%i in ('date /t') do set datum=%%i && echo %datum:~-12,10%
Das geht und liefert mir immer das Datum im Format: DD:MM:YYYY
Geht dies auch kürzer?
Ich würde gerne die &&-Verknüfung noch weglassen, allerdings geht dann der Tilde-Operator nicht mehr.
Wer kann helfen?
Grüße,
slickwilly2000
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 54240
Url: https://administrator.de/contentid/54240
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
8 Kommentare
Neuester Kommentar
Na ja,
wenn die vereinfachte Annahme gilt, dass auf allen relevanten Rechnern ein "deutsches" Datumsformat angezeigt wird, also entweder "Fr 16.03.2007" oder nur "16.03.2007", dann geht es nur über das o.b. Setzen einer Zwischenvariable, wenn davon ein Teilstring gebraucht wird.
Und wenn das in einer Zeile passieren soll, dann muss eben auch mit dem "&&" verkettet werden.
[Nicht berücksichtigt: die Variable könnte natürlich auch %d% genannt werden statt %datum% ]
Gruss Biber
wenn die vereinfachte Annahme gilt, dass auf allen relevanten Rechnern ein "deutsches" Datumsformat angezeigt wird, also entweder "Fr 16.03.2007" oder nur "16.03.2007", dann geht es nur über das o.b. Setzen einer Zwischenvariable, wenn davon ein Teilstring gebraucht wird.
Und wenn das in einer Zeile passieren soll, dann muss eben auch mit dem "&&" verkettet werden.
for /f "delims=" %%i in ('date /t') do set datum=%%i && echo %datum:~-10%
-->wäre dann schon die kürzeste Lösung.[Nicht berücksichtigt: die Variable könnte natürlich auch %d% genannt werden statt %datum% ]
Gruss Biber
Moin slickywilly2000,
die Ursache ist, dass die Variable %datum% in einer Zeile gesetzt und wieder gelesen werden soll.
Der CMD-Interpreter arbeitet zeilenweise.
Da der CMD-Interpreter die gesamte Zeile vor der Ausführung einmal liest, auf formale Syntaxrichtigkeit prüft, alle darin enthaltenen Variablen einmalig auflöst und dann die Zeile ausführt, ergibt ein "echo %datum%" genau das, was ein "echo %datum%"als einziger Zeileninhalt ergeben würde - den Wert, den die Variable %datum% in der Vorzeile hatte.
Lösungen
a ) [recommended]
Mach zwei Zeilen draus. Statt mit "&&" in einer Zeile verknüpfen, eine Zeile für die FOR-Anweisung, eine zweite für das "Echo %datum%"
b) Mit "verzögerter Variablenauflösung"/DelayedExpansion arbeiten
Gruss
Biber
die Ursache ist, dass die Variable %datum% in einer Zeile gesetzt und wieder gelesen werden soll.
Der CMD-Interpreter arbeitet zeilenweise.
Da der CMD-Interpreter die gesamte Zeile vor der Ausführung einmal liest, auf formale Syntaxrichtigkeit prüft, alle darin enthaltenen Variablen einmalig auflöst und dann die Zeile ausführt, ergibt ein "echo %datum%" genau das, was ein "echo %datum%"als einziger Zeileninhalt ergeben würde - den Wert, den die Variable %datum% in der Vorzeile hatte.
Lösungen
a ) [recommended]
Mach zwei Zeilen draus. Statt mit "&&" in einer Zeile verknüpfen, eine Zeile für die FOR-Anweisung, eine zweite für das "Echo %datum%"
@echo off & setlocal
for /f "delims=" %%i in ('date /t') do set datum=%%i
echo %datum%
pause
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('date /t') do set datum=%%i && echo !datum!
pause
Gruss
Biber