Ich bin auf einen Fehler in meinem DOS-Skript gestoßen, der Datums- und Zeitdaten für die Benennung von Dateien verwendet. Das Problem war, dass ich eine Lücke hatte, weil die Zeitvariable für Stunde <10 nicht automatisch die führende Null lieferte. Also gibt echo% time% zurück: '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
Dies endet mit: C: \ Temp \ robolog_20100602_ 93208.log (um 9:23 Uhr morgens).
Diese Frage hängt mit dieser zusammen .
Vielen Dank
Antworten:
Eine sehr einfache Möglichkeit besteht darin, das führende Leerzeichen einfach durch Null zu ersetzen
echo %TIME: =0%
:
09:18:53,45
quelle
set HH=%time:~-11,2% set MM=%time:~-8,2% set SS=%time:~-5,2% set ISOTIME=%HH: =0%-%MM%-%SS% echo %ISOTIME%
Siehe auch ss64.com/nt/syntax-replace.htmlset timestring=%TIME: =0%
Früh im Sub Call - dann arbeite ichtimestring
stattdessen mit (oder mit welcher Variablen auch immer).Meine Lösung bestand darin, die folgende Idee zu verwenden:
quelle
but gives syntax error on server 2003
- warum interessiert dich das im Jahr 2016?Eine ähnliche Idee wie Dennis 'Antwort . Das Problem ist, dass die Breite von
%time%
immer gleich ist, sodass am Anfang ein Leerzeichen eingefügt wird, anstatt eine kürzere Zeichenfolge zurückzugeben.Sie können das loswerden mit
for
:Der Rest ist dann mehr oder weniger gleich.
quelle
Ich habe gerade mit Jesse's Contribution eine Variable mit der geänderten Ausgabe erstellt. Dann beziehe ich mich auf diese Variable, um den Stundenanteil zu bilden.
Mit der Originalquelle:
Danke Jesse. Ich hätte abgestimmt, wenn ich die Reputationspunkte hätte.
quelle
Für die kompakteste Lösung, die alles oben umsetzt, denke ich das
würde hier funktionieren, ohne dem Skript neue Zeilen hinzuzufügen. Es ist jedoch vielleicht weniger elegant als Lösungen mit mehreren Befehlen.
quelle
Das Folgende braucht ein paar Zeilen mehr, ist aber klar und verständlich. Es speichert stdout und stderr in separaten Dateien mit jeweils einem Zeitstempel. Der Zeitstempel enthält Jahr, Monat, Tag, Stunde, Minute und Sekunde in dieser Reihenfolge. Zeitstempel sollten immer die höchstwertige Datumskomponente zuerst (Jahr) und die niedrigste Komponente (Sekunden) zuletzt haben. Auf diese Weise können die Dateien in zeitlicher Reihenfolge aufgelistet werden. Hier ist ohne weiteres meine Lösung.
quelle
Dies setzt eine Null auf den Beginn der Zeit und nimmt die letzten beiden Ziffern der Stunde (die Startpositionen für Minute und Sekunde sind um eins verschoben). So wird 3 Uhr morgens "03", dann "03" und Stunde 15 wird "015", dann "15".
Weniger lesbar:
quelle
Eine Codezeile wird tun, was Sie brauchen:
Beispielsweise verwende ich% Date% und füge dann einer Variablen, die ich verwende, eine führende Null hinzu, um zu bestimmen, ob ich das führende Leerzeichen für% Time% durch eine Null ersetzen muss.
quelle
Dadurch wird ein sortierbarer Zeitstempel erstellt, und in der zweiten Zeile wird sichergestellt, dass keine Leerzeichen für einstellige Stunden usw. vorhanden sind, um die Verwendung für Skripte zu ermöglichen:
Ausgabe:
quelle
Dank der Hilfe von oben ... Dies ist, was ich benutze:
Ich habe dann Protokolle, die in Robocopy-Jobs wie folgt aufgerufen werden:
Es gibt viele davon:
Beendet den Job damit:
COMPLETE_LOG_2018-06-27_10_53_54.log
ist die am Ende erzeugte Datei und kann nach Dateinamen sortiert werden.quelle
Jesses Antwort löste mein Problem mit dem Umbenennen von Dateien, indem das Leerzeichen im Stundenfeld entfernt wurde. So setze ich meine Variablen:
Es funktioniert wie ein Champion. aus irgendeinem grund brauchte date nicht die gleiche behandlung, aber ich stelle mir vor, das liegt an den regionalen einstellungen.
quelle
quelle
quelle