2011-02-13 5 views
10

Projet de déplacement vers l'avant, je peux voir pourquoi créer des fichiers .bat pour faire des choses peut devenir addictif! Je peux maintenant enregistrer somefile.txt à intervalles réguliers, je renomme puis somefile.txt en ajoutant l'heure et la date de créer un nom de fichier uniquecmd ligne renommer le fichier avec la date et l'heure

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 a simplement renommé somefile.txt-somefile_1317_13022011.txt (1317hrs on 13th February 2011)

Je couru

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

hier, il a couru avec succès jusqu'à minuit, puis il est écrasé (erreur de syntaxe) bien qu'il économisait comme 12.012.011 pour la date (12 janvier 2011) au lieu de la bonne date de 12022011.

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

+2

Est-ce un suivi à une question précédente? Si c'est le cas, vous devez rendre cette question autonome et autosuffisante. Actuellement, tout semble n'avoir aucun sens. :) – bzlm

+0

Toutes les réponses ici essayer de contourner la machine-hostile (ne va pas argumenter sur la convivialité ici) Format de l'heure américaine de 12 heures, nonobstant la dépendance locale en général. Qu'en est-il de l'utilisation d'une source de temps indépendante des paramètres régionaux avec un format de 24 heures. Voir http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-us –

Répondre

5

suivant devrait être votre bonne solution

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

Animuson donne un moyen décent de le faire, mais aucune aide sur le comprendre. Je regardais et suis tombé sur un forum thread avec cette commande:

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%[email protected]_%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%[email protected]_%time:~1,1%h%time:~3,2%m%time:~6,2%s%.txt 

J'ai toujours nom première année 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 volonté, parce que (l'espace) est un caractère non valide. Cela m'a ouvert les yeux sur le problème. De plus, par défaut, vous êtes en mode 24h.

J'ai fini 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 
+1

Au lieu de s'appuyer sur un échec de changement de nom , J'ai découvert que vous pouvez obtenir l'horodatage, puis remplacer ensuite un espace possible avec 0: set logtime =% temps: ~ 0,2 %% temps: ~ 3,2% set logtime =% logtime: = 0% – Rassi

+0

Toujours déconseillé d'utiliser des hacks (maintenabilité et garder les choses simples à suivre et à comprendre devrait toujours être la règle d'or numéro 1 pour tous les travaux). La plupart des solutions ci-dessous sont plus propres que cela (bien que vous utilisiez le meilleur format de temps IMHO). – SeeMoreGain

3
problème

dans %time:~0,2% ne peut pas mettre au format 24 heures, a pris fin avec l'espace (1-9), au lieu de 0 (1-9)

se promener avec:

mis HR=%time:~0,2%

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

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

bonne chance

4

je pris le dessus, mais a dû ajouter une pièce, car il mettait un espace après l'heure qui a donné une erreur de syntaxe avec la commande renommer. Je 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é mon format que je avais besoin: copyinvoices_results_2013-09-13_0845.log

+0

Cela échouera si votre ordinateur n'a pas l'heure au format mois/jour/année, c'est-à-dire si vous n'êtes pas aux États-Unis. – neves

5

Fouiller le vieux fil parce que toutes les solutions ont manqué la solution la plus simple ...

Il échoue parce que 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 un 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 un modèle de date que vous souhaitez (à l'exception de ces caractères illégaux tels que /, \, ...)

je suggère l'ordre chronologique inverse AAAAMMJJ-HHMM:

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

Il semble que votre fichier apparaisse comme YYYYDDMM-HHMM (la date et le mois sont inversés). – Sun

+1

@ sunk818 Ce serait un problème de locale. % date utilise le format de date sur votre ordinateur. Toutes les réponses supposent un format de date JJ/MM/AAAA plutôt que MM/JJ/AAAA. Si vous voulez une méthode agnostique locale, la solution est un peu plus complexe - vous devez utiliser les résultats de la commande 'wmic os get localdatetime'. Un exemple de ceci peut être vu dans [link] (http://stackoverflow.com/a/10945887/1793348) – SeeMoreGain

+0

Merci, ça l'explique. Je suis boueuse et tu es dummy. – Sun

-2
ls | xargs -I % mv % %_`date +%d%b%Y` 

Une ligne suffit. ls tous les fichiers/répertoires sous le répertoire actuel et ajouter la date à chaque fichier.

+0

La syntaxe 'cmd' n'est pas valide. – melpomene

-2

J'ai essayé de faire la même chose:

<fileName>.<ext> --> <fileName>_<date>_<time>.<ext> 

Je trouve que:

rename 's/(\w+)(\.\w+)/$1'$(date +"%Y%m%d_%H%M%S)'$2/' * 
+0

La syntaxe 'cmd' n'est pas valide. – melpomene

+0

complètement à droite .. Je n'ai pas vu la question était sur cmd .. va supprimer ma réponse – mnennon

Questions connexes