Führende Null für Batch-Skript mit der Variable %time% erforderlich

Führende Null für Batch-Skript mit der Variable %time% erforderlich

Ich bin auf einen Fehler in meinem DOS-Skript gestoßen, das Datums- und Zeitdaten zur Dateibenennung verwendet. Das Problem war, dass ich am Ende eine Lücke hatte, weil die Zeitvariable nicht automatisch eine führende Null für Stunden < 10 bereitstellte. Wenn ich also >echo %time% ausführe, wird Folgendes zurückgegeben: „9:29:17.88“.

Kennt jemand eine Möglichkeit, führende Nullen bedingt aufzufüllen, um dies zu beheben?

Weitere Informationen: Mein Befehl zum Festlegen des Dateinamens lautet:

set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

das ergibt dann: C:\Temp\robolog_20100602_ 93208.log (für 9:23 Uhr morgens).

Diese Frage bezieht sich aufDieses hier.

Danke

Antwort1

Eine sehr einfache Möglichkeit besteht darin, das führende Leerzeichen durch eine Null zu ersetzen.
echo %TIME: =0%
Es ergibt sich:
09:18:53,45

Antwort2

Meine Lösung bestand darin, die folgende Idee zu verwenden:

SET HOUR=%TIME:~0,2%
IF "%HOUR:~0,1%" == " " SET HOUR=0%HOUR:~1,1%

Antwort3

Ähnliche Idee wieDennis' Antwort. Das Problem besteht darin, dass die Breite %time%immer gleich ist, sodass am Anfang ein Leerzeichen eingefügt wird, anstatt einen kürzeren String zurückzugeben.

Sie können das loswerden mit for:

for /f "delims= " %x in ("%time%") do set T=0%x

Der Rest ist dann mehr oder weniger gleich.

Antwort4

Für die kompakteste Lösung, die alles oben genannte implementiert, denke ich, dass

FÜR /F "TOKENS=1-4 DELIMS=/ " %%A IN ("%DATE%") FÜHREN FÜR /F "TOKENS=1-3 DELIMS=:." %%E IN ("%TIME: =0%") FÜHREN SET logfile=C:\Temp\robolog_%%D%%C%%B_%%E%%F%%G.log

würde hier funktionieren, ohne dem Skript neue Zeilen hinzuzufügen. Es ist jedoch möglicherweise weniger elegant als Lösungen mit mehreren Befehlen.

verwandte Informationen