Date actuelle dans le nom du fichier

15

J'ai planifié un script de sauvegarde qui effectue le vidage de la base de données. Comment puis-je ajouter l'horodatage de la date au nom de fichier?

Je parle de Windows et CMD.

Bogdan Gusiev
la source

Réponses:

21

Dans l'invite de commande et les fichiers batch, vous pouvez utiliser %date%et %time%pour renvoyer la date et l'heure respectivement. La date fonctionne bien, mais la valeur d'heure renvoyée contient des deux-points, dont l'utilisation dans les noms de fichiers est illégale, mais il existe un moyen de les supprimer.

Utilisez quelque chose comme:

COPY file.txt file_%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.txt

Cela produira un nom de fichier tel que file_172215_01062009.txt

Mise à jour: les commentaires ci-dessous présentent des rebondissements intéressants sur cette commande ainsi que certains problèmes potentiels que vous pouvez éviter.

aalaap
la source
3
Super petit conseil. BTW, si vous le faites dans l'autre sens, c'est-à-dire: "file_20090601_172215", vous verrez les fichiers dans le bon ordre dans une liste alphabétique.
5
Vous pouvez également utiliser% time :: =% pour supprimer les deux-points.
user1686
2
Je dirais que la sous-chaîne de date se briserait dès que les paramètres régionaux du système diffèrent du moment où le script a été testé? Cela pourrait même fonctionner pour l'utilisateur
testeur
3
Attention aux heures 0 - 9! CMD définit le premier caractère de l'heure sur <ESPACE>, plutôt que sur 0. La commande COPY ci-dessus va avoir des problèmes si vous ne placez pas le nom de fichier de destination entre guillemets.
Evan Anderson
2
Notez que %DATE%et %TIME%sont sensibles aux paramètres régionaux! Cela signifie que sur une machine européenne, vous obtenez DD.MM.YYYY. Arrgh.
Pekka
14

Utilisez les variables d'environnement %DATE%et / ou %TIME, en remplaçant éventuellement les caractères qui ne sont pas autorisés dans les noms de fichiers, en utilisant %name:from=to%( %TIME::=%supprimerait tous les deux-points).

théorie »echo% date%
2009-06-01

théorie »écho% temps%
16: 30: 41,46

théorie »écho% temps :: =%
163052,17

théorie »écho% temps :: =,%
16,30,58,68

théorie »echo backup-% date% -% time :: = -%. zip
backup-2009-06-01-16-31-18,82.zip
user1686
la source
1
wow, je ne connais jamais l'astuce: x = y. c'est vraiment cool.
Eugene Katz
1
+1 pour l'astuce: =, iv'e est dans ce jeu depuis MS-Dos 1 et c'est la première fois qu'Iv'e voit celui-là. Ce serait encore mieux si vous pouviez aussi changer plusieurs caractères !! :-)
shawty
Eh bien, il n'a été ajouté qu'à Cmd.exe dans la série Windows NT ... Et si vous souhaitez effectuer plusieurs modifications, il suffit d'avoir une chaîne de set tmp=%tmp:x=y%etc.
user1686
Le contenu de% DATE% (nombre de fichiers, contenu et commande) est spécifique aux paramètres régionaux.
symcbean
4

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

@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
Eric Ouellet
la source
1

Utilisez la variable% DATE% dans le nom de fichier.

Il existe également une variable% TIME%, mais elle contient des caractères non autorisés dans un nom de fichier.

Voici un exemple d'écriture d'une ligne de texte dans un nouveau fichier, où le fichier créé a une date et une heure dans son nom.

echo "testfile" >> backup-%DATE%.txt
Frode Lillerud
la source