slickwilly2000
Goto Top

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

Content-Key: 54240

Url: https://administrator.de/contentid/54240

Printed on: April 25, 2024 at 12:04 o'clock

Member: Biber
Biber Mar 16, 2007 at 11:55:11 (UTC)
Goto Top
Moin slickywilly2000,

echo %date:~-12,10%
--oder--
set mydate=%date:~-12,10%

HTH Biber
Member: slickwilly2000
slickwilly2000 Mar 16, 2007 at 12:16:26 (UTC)
Goto Top
Das hilft mir leider überhaupt nicht weiter.

Ich habe doch extra geschrieben, daß ich es plattformunabhängig machen möchte. Die Umgebungsvariable %date% bzw. %time% gibt es unter NT 4.0 nicht.

Deshalb der "Umweg" über den for-Befehl.

Die Frage lässt sich auch reduzieren: Wie schaffe ich es, aus der Variablen %%i des for-Befehls den Tilde-Operator anzuwenden. Da habe ich das Problem.


Grüße,
slickwilly2000
Member: eeleater
eeleater Mar 16, 2007 at 13:23:56 (UTC)
Goto Top
@echo off
for /f "tokens=1,2,3,4 delims=/." %%a in ('date /t') do set CDATE=%%c-%%b-%%a
echo %cdate%

probier es mal damit, hinten bei do set CDATE= kannst du das gewünschte format einstellen
Member: Biber
Biber Mar 16, 2007 at 17:44:08 (UTC)
Goto Top
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.

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% face-wink ]

Gruss Biber
Member: eeleater
eeleater Mar 17, 2007 at 16:04:46 (UTC)
Goto Top
stimmt des ginge auch...
Member: slickwilly2000
slickwilly2000 Mar 18, 2007 at 11:08:04 (UTC)
Goto Top
Danke für eure Antworten.

Es gibt aber ein Problem, wie ich gerade sehe: Die Variable %datum% ist nicht gesetzt, wenn ich den zweiten Befehl mit && verknüpfe. Erst in einer neuen Zeile ist die Umgebungsvariable dann gesetzt.

Vielleicht könnte mal einer vergleichen:

echo off
for /f "delims=" %%i in ('date /t') do set datum=%%i && echo %datum%
pause
echo %datum%
pause


(gestestet unter Windows XP)


Wer kennt die Ursache, oder noch besser die Lösung für dieses Problem?

Grüße,
Alex
Member: Biber
Biber Mar 18, 2007 at 17:08:11 (UTC)
Goto Top
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%"
@echo off & setlocal
for /f "delims=" %%i in ('date /t') do set datum=%%i   
echo %datum%
pause
b) Mit "verzögerter Variablenauflösung"/DelayedExpansion arbeiten
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('date /t') do set datum=%%i && echo !datum!  
pause

Gruss
Biber
Member: slickwilly2000
slickwilly2000 Mar 23, 2007 at 15:39:13 (UTC)
Goto Top
Vielen Dank für eure Antworten! Es hat mir sehr weitergeholfen.


Es ist schon erstaunlich, daß man immer wieder was über Batch dazulernt.


Grüße,
slickwilly2000