Ich führe ein Programm aus einer Batch-Datei aus, die dann eine automatische Sicherung meiner MySQL-Datenbank durchführt.
Ich möchte, dass die Batch-Datei für jeden Lauf eine andere Sicherung erstellt, damit ich zurückverfolgen kann.
Der gewünschte Dateiname wäre gnucash_shockwave-20121128210344.sql (Datumsformat JJJJ-MM-TT-HH-MM-SS)
Ich habe ein paar Dinge gegoogelt, die gesagt haben, versuchen Sie es %DATE:~4%
und %Date.Year%
ich erhalte einen Fehler, der besagtThe system cannot find the specified path.
Wenn ich den Zeitstempelversuch entferne, funktioniert das Skript einwandfrei, überschreibt jedoch die vorherige Sicherung
Hier ist der Codeabschnitt, über den ich spreche:
@REM *** EXECUTION ***
echo. Starting backup...
SET timestamp %DATE:~-4%%DATE:~4,2%%DATE:~7,2%%TIME%
%mysqldir%\mysqldump -u %mysqluser% -p%mysqlpassword% -h %mysqlhost% -P %mysqlport% --databases --routines --verbose gnucash_shockwave > %BackupDir%\gnucash_shockwave-%timestamp%.sql
echo.------------------------------------------------------
echo. Backup complete!
Irgendwelche Vorschläge?
windows
batch-file
date-time
guyfromfl
quelle
quelle
Antworten:
Das Datums- und Uhrzeitformat hängt davon ab, was Sie im Applet der Regions- und Sprachsteuerung angegeben haben .
Führen Sie die folgende Stapeldatei aus ( dd / mm / yyyy und hh: mm: ss vorausgesetzt ) und ändern Sie die Teilstring-Extraktion (unter Verwendung der Zeichen: und ~) nach Bedarf, um die richtigen Teile aus Datums- und Uhrzeitzeichenfolgen abzurufen :
Weitere Hilfe zum Extrahieren von Teilzeichenfolgen erhalten Sie, indem Sie
set /?
an der Eingabeaufforderung Folgendes eingeben oder auf dieser Seite nachsehen .quelle
> echo yyyy = %DATE:~6,4%
produzieren kannyyyy = /20/
. Istecho yyyy = %DATE:~10,4%
aberyyyy = 2019
.Hier ist, was für mich gearbeitet hat.
quelle
Mit ein wenig Fingerspitzengefühl bekam ich das
Ergebnis:
"test-do_25_06-2015-22_21_51.txt" (Thursday_25th_June_2015-22:21.51)
quelle
%DATE%
~Ddd MM/DD/YYYY
annimmt, während diese eine Nicht-US-Region mit%DATE%
~DD/MM/YYYY
(ohne Wochentag) annimmt . Und dieser unterscheidet sich von Karans Antwort darin, dass dieser falsch ist - die Frage fragt nach JJJJMMTT; Diese Antwort ergibt TT_MM – JJJJ.Entschuldigung für die Verspätung ...
Die einzige verlässliche Möglichkeit, ein geeignetes Datum zu erhalten, ist die Lösung von foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script
quelle
Ich denke, dies verbessert @ Nick Rogers Antwort ein wenig.
EX: mit dem deutschen locate (de_DE) gibt es bei stunden unter 10 einen führenden whitespace.
Ich wollte auch eine führende Null zur vollen Stunde. "echo -! ^ _ hh! -" gibt "09" statt nur "9"
Also zerlege ich den Code in zwei Teile, um ihn besser lesen zu können. Dieses Beispiel sollte mit mehr Gebietsschemas übereinstimmen.
+ Bonus: _ms = Millisekunden oder was auch immer die letzten beiden Ziffern sind (-;
Bemerkung: Manchmal muss die HOUR maskiert werden, siehe Code im Inneren
Ausgänge: Echo fullTime = 15062018-10182821
quelle
Die kürzeste (vielseitigste?) Antwort lautet wie folgt: TimeStamp.cmd-Skript mit nur drei Codezeilen (ohne Kommentare usw.)
Beachten Sie, dass für die Variable in einer FOR-Anweisung in einer Batchdatei %% anstelle von% verwendet werden muss
... Ausführungserträge (Leerzeilen und Kommentare entfernt) ...
quelle