J'exécute un programme à partir d'un fichier de commandes qui, une fois terminé, effectue une sauvegarde automatique de ma base de données MySQL.
J'aimerais que le fichier de commandes crée une sauvegarde différente pour chaque exécution, afin que je puisse revenir en arrière.
Le nom de fichier souhaité serait gnucash_shockwave-20121128210344.sql (format de date AAAA-MM-JJ-HH-MM-SS)
J'ai googlé quelques choses qui ont dit essayer %DATE:~4%
et %Date.Year%
mais je reçois une erreur qui ditThe system cannot find the specified path.
Si je supprime la tentative d'horodatage, le script fonctionne correctement, mais écrase la sauvegarde précédente
Voici la section de 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?
windows
batch-file
date-time
guyfromfl
la source
la source
Réponses:
Le format de date et d'heure dépend de ce que vous avez spécifié dans l' applet du panneau de configuration de la région et de la langue .
Exécutez le fichier de commandes 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 ~) comme requis pour obtenir les pièces appropriées des chaînes de date et d'heure:
Pour plus d'aide sur l'extraction de sous-chaîne, tapez
set /?
à l'invite de commande ou consultez cette page .la source
> echo yyyy = %DATE:~6,4%
produireyyyy = /20/
. Maisecho yyyy = %DATE:~10,4%
c'estyyyy = 2019
.Voici ce qui a fonctionné pour moi.
la source
Avec un petit ajustement, j'ai obtenu ceci
Résultat:
"test-do_25_06-2015-22_21_51.txt" (Thursday_25th_June_2015-22:21.51)
la source
%DATE%
~Ddd MM/DD/YYYY
, tandis que celle-ci suppose une région non américaine, où%DATE%
~DD/MM/YYYY
(sans le jour de la semaine). Et celui-ci diffère de la réponse de Karan en ce que celui-ci est faux - la question demande YYYYMMDD; cette réponse donne DD_MM – YYYY.Désolé pour le retard ...
Le seul moyen fiable d'obtenir la date appropriée quel que soit le paramètre régional est la solution de foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script
la source
Je pense que cela améliore un peu la réponse de @Nick Rogers.
EX: avec la localisation allemande (de_DE), il y a un espace blanc de premier plan aux heures en dessous de 10.
aussi je voulais un zéro de tête à l'heure. "echo -! ^ _ hh! -" donne "09" au lieu de "9"
donc je casse le code en deux morceaux pour une meilleure lecture. cet exemple devrait correspondre à plus de paramètres régionaux.
+ bonus: _ms = millisecondes ou quels que soient les deux derniers chiffres (-;
remarque: parfois l'HEURE doit être échappée, voir code intérieur
sorties: echo fullTime = 15062018-10182821
la source
la réponse la plus courte (la plus polyvalente?) est conforme au script TimeStamp.cmd suivant contenant seulement trois lignes de code (à l'exclusion des commentaires, etc.) ...
Notez la nécessité d'utiliser %% plutôt que% pour la variable dans une instruction FOR dans un fichier de commandes
... rendements d'exécution (lignes vierges et commentaires supprimés) ...
la source