Utilisation de Date et Times dans un fichier batch pour créer un nom de fichier

Je lance un programme à partir d'un fichier batch qui, lorsqu'il est effectué, effectue une sauvegarde automatique de ma base de données MySQL.

J'aimerais que le fichier batch crée un back-up différent pour chaque exécution, afin que je puisse rétrograder.

Le nom de fichier désiré serait gnucash_shockwave-20121128210344.sql (format de date YYYY-MM-DD-HH-MM-SS)

J'ai googlé quelques choses qui ont déclaré essayer %DATE:~4% et %Date.Year% mais j'ai une erreur qui indique que The system cannot find the specified path.

Si je supprime la tentative d'horodatage, le script fonctionne bien, mais sur l'écriture de la sauvegarde précédente

Voici la section du code dont je parle:

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

Aucune suggestion?

Le format Date et heure dépend de ce que vous avez spécifié dans l'applet Région et Contrôle du langage .

Exécutez le fichier de lot suivant (qui suppose jj / mm / aaaa et hh: mm: ss ) et modifiez l'extraction de la sous-chaîne (en utilisant les caractères: et ~) pour obtenir les pièces appropriées à partir des chaînes Date et heure:

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

Pour plus d'aide sur l'extraction de la sous-chaîne, tapez set /? À l'invite de commandes ou voir cette page .

Voici ce qui a fonctionné pour moi.

 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 

Avec un peu de peaufinage, j'ai eu ça

 @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 

Résultat:

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