2011-02-13 18 views
10

Proyecto avanzando, puedo ver por qué crear archivos .bat para hacer cosas puede volverse adictivo! ahora puedo guardar Unarchivo.txt a intervalos regulares, que a continuación, cambiar el nombre de Unarchivo.txt añadiendo la fecha y la hora de crear un nombre de archivo únicoarchivo de renombrado de línea cmd con fecha y hora

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

A modo de ejemplo, el código anterior solo ha cambiado el nombre a somefile.txtsomefile_1317_13022011.txt (1317hrs on 13th February 2011)

me corrieron

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

ayer, que funcionó con éxito hasta la medianoche, y luego se estrelló (error de sintaxis) a pesar de que estaba salvando como 12.012.011 de la fecha (12º ene 2011) en lugar de la correcta fecha de 12022011.

¿La versión actual se ejecutó pasada la medianoche? ¿Me estoy confundiendo con el formato de fecha del Reino Unido y los Estados Unidos?

+2

Es esto un seguimiento a una pregunta anterior? Si es así, debe hacer que esta pregunta sea autónoma y autosuficiente. Actualmente, todo parece tener poco sentido. :) – bzlm

+0

Todas las respuestas aquí intentan solucionar el problema de la máquina (no voy a discutir sobre la facilidad para el usuario aquí) Formato de 12 horas, a pesar de la dependencia del lugar en general. ¿Qué pasa con el uso de fuente de tiempo independiente de la configuración regional con formato de 24 horas? Consulte http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-us –

Respuesta

5

siguiente debería ser la solución correcta

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

Animuson da una buena manera de hacerlo, pero no ayuda en la comprensión de la misma. Seguí buscando y me encontré con un forum thread con estos comandos:

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 

Siempre años AAAAMMDD nombre primero, pero quería añadir tiempo. Aquí verá que ha dado una razón por la cual 0,2 no funcionará y 1,1 lo hará, porque (espacio) es un carácter inválido. Esto me abrió los ojos al problema. Además, por defecto estás en modo 24 horas.

que terminó con:

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 

Salida:

Logs-20121707_1019 
+1

En lugar de confiar en un cambio de nombre fallido , Descubrí que puedes obtener la marca de tiempo y luego reemplazar un posible espacio con 0: set logtime =% de tiempo: ~ 0,2%% de tiempo: ~ 3,2% set logtime =% logtime: = 0% – Rassi

+0

Siempre es desaconsejable el uso de hacks (la mantenibilidad y el mantenimiento de las cosas simples de seguir y entender siempre deben ser la regla de oro número 1 para todo el trabajo). La mayoría de las soluciones a continuación son más limpias que esto (aunque sí utiliza el mejor formato de tiempo en mi humilde opinión). – SeeMoreGain

3

problema en %time:~0,2% no puede configurarse en el formato de 24 horas, terminó con el espacio (1-9), en lugar de 0 (1-9)

andar con:

conjunto HR=%time:~0,2%

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

luego vuelva a %time:~0,2% con %HR%

buena suerte

4

Tomé el anterior, pero tuvo que añadir una pieza más, ya que estaba poniendo un espacio después de la hora, lo que dio un error de sintaxis con el comando de cambio de nombre. utilicé:

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 

Esto me dio mi formato que necesitaba: copyinvoices_results_2013-09-13_0845.log

+0

Esto fallará si su computadora no tiene el formato de hora como mes/día/año, es decir, si no se encuentra en EE. UU. – neves

5

Excavando el hilo de edad porque todas las soluciones han perdido la solución más simple ...

Está fallando porque la sustitución de la variable de tiempo da como resultado un espacio en el nombre de archivo, lo que significa que trata la última parte del nombre de archivo como un parámetro en el comando.

La solución más simple es simplemente rodear el nombre de archivo deseado entre comillas "filename".

, entonces puede tener cualquier patrón de fecha que desee (con la excepción de los caracteres no válidos como /, \, ...)

Yo sugeriría orden cronológico inverso AAAAMMDD-HHMM:

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

Parece que su archivo aparece como YYYYDDMM-HHMM (la fecha y el mes están invertidos). – Sun

+1

@ sunk818 Este sería un problema de configuración regional. % date usa el formato de fecha en su computadora. Todas las respuestas aquí están asumiendo un formato de fecha de DD/MM/YYYY en lugar de MM/DD/YYYY. Si desea una forma agnóstica de hacerlo de manera local, la solución es un poco más compleja: debe usar los resultados del comando 'wmic os get localdatetime'. Un ejemplo de esto se puede ver en [link] (http://stackoverflow.com/a/10945887/1793348) – SeeMoreGain

+0

Gracias, eso lo explica. Estoy embarrado y eres tonto. – Sun

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

Una línea es suficiente. ls todos los archivos/directorios bajo el directorio actual y anexar fecha a cada archivo.

+0

No es una sintaxis 'cmd' válida. – melpomene

-2

Me trataron de hacer lo mismo:

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

encontré que:

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

No es una sintaxis 'cmd' válida. – melpomene

+0

completamente a la derecha .. No vi que la pregunta era sobre cmd .. borrará mi respuesta – mnennon

Cuestiones relacionadas