2012-11-29 02:49:32 +0000 2012-11-29 02:49:32 +0000
21
21

Met behulp van Date and Times in een batch file om een bestandsnaam

te maken, draai ik een programma vanuit een batch file, die als het klaar is een automatische back-up maakt van mijn MySQL database.

Ik wil graag dat het batch file een andere back-up maakt voor elke run, zodat ik een back-up kan maken.

De gewenste bestandsnaam zou gnucash_shockwave-20121128210344 zijn. sql (Datum formaat YYYY-MM-DD-HH-MM-SS)

Ik heb een paar dingen gegoogled die zeiden probeer %DATE:~4% en %Date.Year% maar ik krijg een fout die zegt The system cannot find the specified path.

Als ik de poging om de tijdstempel te verwijderen, het script werkt prima, maar over schrijft de vorige back-up

Hier is het gedeelte van de code waar ik het over heb:

@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!

Enige suggesties?

Antwoorden (6)

28
28
28
2012-11-29 18:00:07 +0000

De datum- en tijdnotatie is afhankelijk van wat u hebt opgegeven in de Regio en Taal Controlepaneelapplicatie.

Voer het volgende batchbestand uit (dat uitgaat van dd/mm/yyyy en hh:mm:ss) en wijzig de ondergrondextractie (met behulp van de : en ~ tekens) zoals vereist om de juiste onderdelen uit zowel de datum- als de tijdreeksen te krijgen:

@echo off
cls
echo Date format = %date%
echo dd = %date:~0,2%
echo mm = %date:~3,2%
echo yyyy = %date:~6,4%
echo.
echo Time format = %time%
echo hh = %time:~0,2%
echo mm = %time:~3,2%
echo ss = %time:~6,2%
echo.
echo Timestamp = %date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%

Voor meer hulp bij ondergrondextractie, typ set /? bij de opdrachtprompt of zie deze pagina .

8
8
8
2015-03-05 20:56:02 +0000

Dit is wat voor mij werkte.

Format - mmddyyyy_HHMMSS

echo %DATE% %TIME%

Date format = Thu 03/05/2015 15:48:26.22

echo mm = %date:~4,2%

echo dd = %date:~7,2%

echo yyyy = %date:~10,4%

echo Timestamp = %date:~4,2%%date:~7,2%%date:~10,4%_%time:~0,2%%time:~3,2%%time:~6,2%

Timestamp - 03052015_154013
3
3
3
2015-06-25 20:25:48 +0000

Met een kleine aanpassing kreeg ik deze

@echo off
cls
echo Date format = %date%
echo dd = %date:~0,2%
echo mm = %date:~3,2%
echo yyyy = %date:~6,8%
echo.
echo Time format = %time%
echo hh = %time:~0,2%
echo mm = %time:~3,2%
echo ss = %time:~6,2%
echo.
echo Timestamp = %date:~0,2%_%date:~3,2%_%date:~6,8%-%time:~0,2%_%time:~3,2%_%time:~6,2%
ECHO "TEST..." > test-%date:~0,2%_%date:~3,2%_%date:~6,8%-%time:~0,2%_%time:~3,2%_%time:~6,2%.txt

Resultaat:

"test-do_25_06-2015-22_21_51.txt" (Thursday_25th_June_2015-22:21.51)

2
2
2
2019-03-28 17:59:29 +0000

Sorry voor de vertraging…

De enige betrouwbare manier om de juiste datum te krijgen, ongeacht de regionale instelling, is de oplossing van foxidrive @ https://stackoverflow.com/questions/11037831/filename-timestamp-in-windows-cmd-batch-script ](https://stackoverflow.com/questions/11037831/filename-timestamp-in-windows-cmd-batch-script) “` @echo off for /f "tokens=2 delims==” %%a in (‘wmic OS Get localdatetime /value’) do set “dt=%%a” set “YY=%dt:~2,2%” & set “YYYY=%dt:~0,4%” & set “MM=%dt:~4,2%” & set “DD=%dt:~6,2%” set “HH=%dt:~8,2%” & set “Min=%dt:~10,2%” & set “Sec=%dt:~12,2%”

set “datestamp=%YYYY%%MM%%DD%” & set “timestamp=%HH%%Min%%Sec%” set “fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%” echo datestamp: “%datestamp%” echo timestamp: “%timestamp%” echo fullstamp: “%fullstamp%” pause “`.

1
1
1
2018-06-15 08:44:00 +0000

Ik denk dat dit beter is @Nick Rogers antwoord een beetje.

EX: met de duitse lokalisatie (de_DE) is er een leidende witruimte op uren onder de 10.

ook wilde ik een leidende nul op het uur. “echo - !^hhh! -” geeft “09” in plaats van alleen “9”

zodat ik de code in twee stukken breek voor een betere leesbaarheid.

+bonus: _ms = milliseconden of wat de laatste twee cijfers ook zijn (-;

opmerking: soms moet het UUR ontsnapt worden, zie binnenin code

SETLOCAL
SETLOCAL EnableExtensions
SETLOCAL EnableDelayedExpansion
@ECHO ON
@rem use FOR /F to 'break out' the components of %DATE% and %TIME%, assuming 'yyyy/mm/dd' format date i.e.
@rem works also with german standard format dd.mm.yyyy

echo ----- date -----
    echo _%date%_
    for /F "tokens=1-3 delims=.-/" %%i IN ("%date%") DO Set "_Y=%%i"& Set "_M=%%j"& Set "_D=%%k"
    @rem Switch the year and day if appropriate
    IF "xx%_D:~2%" == "xx" Set "_Y=%_D%"& Set "_D=%_Y%"
    set __date=%_Y%%_M%%_D%
    echo _%__date%_
echo ----- date -----

echo ----- time -----
    echo _%time%_
    for /F "tokens=1-4 delims=:," %%l IN ("%time%") DO Set "_tmp_hh=%%l"& Set "_mm=%%m"& Set "_ss=%%n"& Set "_ms=%%o"
    @rem add leading zero to hour if necessary
    if %_tmp_hh% LSS 10 (set _hh=^0%_tmp_hh:~1,1%) ELSE (set _hh=%time:~0,2%)
    @rem sometimes the HOUR needs to be escaped, like this
    echo - !^_hh! -
    set __time=%_hh%%_mm%%_ss%%_ms%
    echo _%__time%_
echo ----- time -----

    Set fullTime=%_Y%%_M%%_D%-%_hh%%_mm%%_ss%%_ms%
    echo _%fullTime%_
pause

uitgangen: echo fullTime = 15062018-10182821

0
0
0
2018-03-02 11:24:58 +0000

het kortste (meest veelzijdige?) antwoord is volgens het volgende TimeStamp.cmd script dat slechts drie regels code bevat (exclusief commentaar enz.)…

@ECHO ON
@REM use FOR /F to 'break out' the components of %DATE% and %TIME%, assuming 'yyyy/mm/dd' format date i.e.

    for /F "tokens=1-6* delims=.:-/ " %%i IN ("%DATE% %TIME%") DO Set "YYYY=%%i"& Set "MM=%%j"& Set "DD=%%k"& Set "HH=%%l"& Set "MI=%%m"& Set "SS=%%n"

@REM Switch the year and day if appropriate

    IF NOT "X%DD:~2%" == "X" Set "YYYY=%DD%"& Set "DD=%YYYY%"

    Set "TimeStamp=%YYYY%%MM%%DD%%HH%%MI%%SS%"

Noteer de noodzaak om % % in plaats van % te gebruiken voor de variabele in een FOR-afrekening in een batchbestand

…uitvoering geeft (blanco regels en commentaar verwijderd)…

C:\>timestamp.cmd
C:\>for /F "tokens=1-6* delims=.:-/ " %i IN ("2018/03/02 11:17:43.35") DO Set "YYYY=%i" & Set "MM=%j" & Set "DD=%k" & Set "HH=%l" & Set "MI=%m" & Set "SS=%n"
C:\>Set "YYYY=2018" & Set "MM=03" & Set "DD=02" & Set "HH=11" & Set "MI=17" & Set "SS=43"
C:\>IF NOT "X" == "X" Set "YYYY=02" & Set "DD=2018"
C:\>Set "TimeStamp=20180302111743"