web-dev-qa-db-fra.com

ligne de commande renommer le fichier avec la date et l'heure

Le projet avance, je peux voir pourquoi la création de fichiers .bat pour faire des choses peut devenir addictive! Je peux maintenant enregistrer somefile.txt à intervalles réguliers, puis je renomme somefile.txt en ajoutant l'heure et la date pour créer un nom de fichier unique

ren somefile.txt somefile_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~3,2%%date:~-4,4%.txt

À titre d'exemple, le code ci-dessus vient de renommer somefile.txt En somefile_1317_13022011.txt (1317hrs on 13th February 2011)

Iran

ren somefile.txt somefile_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.txt 

hier, il s'est déroulé avec succès jusqu'à minuit, puis il s'est écrasé (erreur de syntaxe) bien qu'il enregistrait comme 12012011 pour la date (12 janvier 2011) au lieu de la date correcte de 12022011.

La version actuelle fonctionnera-t-elle après minuit? Suis-je confus avec le format de date UK vs US?

13
user611620

Animuson donne un moyen décent de le faire, mais aucune aide pour le comprendre. J'ai continué à chercher et suis tombé sur un fil de discussion avec ces commandes:

Echo Off
IF Not EXIST n:\dbfs\doekasp.txt GOTO DoNothing

copy n:\dbfs\doekasp.txt n:\history\doekasp.txt

Rem rename command is done twice (2) to allow for 1 or 2 digit hour,
Rem If before 10am (1digit) hour Rename starting at location (0) for (2) chars,
Rem will error out, as location (0) will have a space
Rem and space is invalid character for file name,
Rem so second remame will be used.
Rem
Rem if equal 10am or later (2 digit hour) then first remame will work and second will not
Rem as doekasp.txt will not be found (remamed)


ren n:\history\doekasp.txt doekasp-%date:~4,2%-%date:~7,2%-%date:~10,4%_@_%time:~0,2%h%time:~3,2%m%time:~6,2%s%.txt
ren n:\history\doekasp.txt doekasp-%date:~4,2%-%date:~7,2%-%date:~10,4%_@_%time:~1,1%h%time:~3,2%m%time:~6,2%s%.txt

Je nomme toujours l'année d'abord AAAAMMJJ, mais je voulais ajouter du temps. Ici, vous verrez qu'il a donné une raison pour laquelle 0,2 ne fonctionnera pas et 1,1 le fera, car (espace) est un caractère invalide. Cela m'a ouvert les yeux sur la question. De plus, par défaut, vous êtes en mode 24h.

Je me suis retrouvé avec:

ren Logs.txt Logs-%date:~10,4%%date:~7,2%%date:~4,2%_%time:~0,2%%time:~3,2%.txt
ren Logs.txt Logs-%date:~10,4%%date:~7,2%%date:~4,2%_%time:~1,1%%time:~3,2%.txt

Sortie:

Logs-20121707_1019
15
silentpete

Déterrer l'ancien fil parce que toutes les solutions ont manqué la solution la plus simple ...

Il échoue car la substitution de la variable de temps entraîne un espace dans le nom de fichier, ce qui signifie qu'il traite la dernière partie du nom de fichier comme paramètre dans la commande.

La solution la plus simple consiste à simplement entourer le nom de fichier souhaité entre guillemets "filename".

Ensuite, vous pouvez avoir n'importe quel modèle de date que vous souhaitez (à l'exception de ces caractères illégaux tels que /, \, ...)

Je suggérerais l'ordre inverse de la date AAAAMMJJ-HHMM:

ren "somefile.txt" "somefile-%date:~10,4%%date:~7,2%%date:~4,2%-%time:~0,2%%time:~3,2%.txt"
8
SeeMoreGain

ce qui devrait être votre bonne solution

ren somefile.txt  somefile_%time:~0,2%%time:~3,2%-%DATE:/=%.txt
5
Raj Gohil

J'ai pris ce qui précède mais j'ai dû ajouter un morceau supplémentaire car il mettait un espace après l'heure, ce qui a donné une erreur de syntaxe avec la commande rename. J'ai utilisé:

    set HR=%time:~0,2%
    set HR=%Hr: =0% 
    set HR=%HR: =%
    rename c:\ops\logs\copyinvoices.log copyinvoices_results_%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%.log 

Cela m'a donné le format dont j'avais besoin: copyinvoices_results_2013-09-13_0845.log

4
Roger

le problème dans %time:~0,2% ne peut pas être défini au format 24 heures, terminé par un espace (1-9), au lieu de 0 (1-9)

faire le tour avec:

définir HR=%time:~0,2%

définir HR=%Hr: =0% (replace space with 0 if any <has a space in between : =0>)

puis remplacez %time:~0,2% par %HR%

bonne chance

3
James Chong