Uruchamiam program z pliku wsadowego, który po zakończeniu wykonuje automatyczną kopię zapasową mojej bazy danych MySQL.
Chciałbym, aby plik wsadowy tworzył inną kopię zapasową dla każdego uruchomienia, dzięki czemu mogę śledzić.
Pożądana nazwa pliku to gnucash_shockwave-20121128210344.sql (Format daty RRRR-MM-DD-HH-MM-SS)
Mam googled kilka rzeczy, w których stwierdzono, spróbuj %DATE:~4%
a %Date.Year%
jednak pojawia się błąd, który mówiThe system cannot find the specified path.
Jeśli usunę próbę znacznika czasowego, skrypt będzie działał poprawnie, ale wcześniej zapisuje poprzednią kopię zapasową
Oto sekcja kodu, o której mówię:
@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!
Jakieś sugestie?
windows
batch-file
date-time
guyfromfl
źródło
źródło
Odpowiedzi:
Format daty i godziny zależy od ustawień określonych w aplecie Region and Language Control Panel.
Uruchom następujący plik wsadowy (który zakłada dd / mm / rrrr i gg: mm: ss ) i zmodyfikuj ekstrakcję podciągów (używając znaków: i ~) zgodnie z wymaganiami, aby uzyskać odpowiednie części z ciągów daty i godziny:
Aby uzyskać więcej pomocy na temat wyciągania podciągów, wpisz
set /?
w wierszu polecenia lub odwiedź tę stronę .źródło
> echo yyyy = %DATE:~6,4%
wyprodukowaćyyyy = /20/
. Jednakecho yyyy = %DATE:~10,4%
jestyyyy = 2019
.Oto, co dla mnie zadziałało.
źródło
Z drobnymi poprawkami mam to
Wynik:
"test-do_25_06-2015-22_21_51.txt" (Thursday_25th_June_2015-22:21.51)
źródło
%DATE%
~Ddd MM/DD/YYYY
, podczas gdy ten zakłada region poza USA, gdzie%DATE%
~DD/MM/YYYY
(bez dnia tygodnia). A ta różni się od odpowiedzi Karana tym, że jest błędna - pytanie dotyczy RRRRMMDD; ta odpowiedź daje DD_MM – RRRR.Przepraszam za opóźnienie ...
Jedynym niezawodnym sposobem uzyskania odpowiedniej daty niezależnie od ustawienia regionalnego jest rozwiązanie foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script
źródło
myślę, że to trochę poprawia odpowiedź @Nick Rogers.
EX: z niemieckim lokalizatorem (de_DE) wiodąca biała spacja w godzinach poniżej 10.
chciałem też mieć zero na początku. „echo -! ^ _ hh! -” daje „09” zamiast tylko „9”
więc podzielę kod na dwie części, aby lepiej czytać. ten przykład powinien pasować do większej liczby lokalizacji.
+ bonus: _ms = milisekundy lub cokolwiek z ostatnich dwóch cyfr (-;
uwaga: czasami GODZINA musi być uciekana, patrz kod wewnętrzny
dane wyjściowe: echo fullTime = 15062018-10182821
źródło
najkrótsza (najbardziej uniwersalna?) odpowiedź jest zgodna z następującym skryptem TimeStamp.cmd zawierającym tylko trzy wiersze kodu (bez komentarzy itp.) ...
Zwróć uwagę na potrzebę użycia %% zamiast% dla zmiennej w instrukcji FOR w pliku wsadowym
... wydajność wykonania (usunięte puste linie i komentarze) ...
źródło