Fecha actual en el nombre del archivo

15

He programado un script de respaldo que hace que la base de datos se vuelque. ¿Cómo puedo agregar la marca de fecha y hora al nombre del archivo?

Estoy hablando de Windows y CMD.

Bogdan Gusiev
fuente

Respuestas:

21

En el símbolo del sistema y los archivos por lotes, puede usar %date%y %time%para devolver la fecha y la hora, respectivamente. La fecha funciona bien, pero el valor de tiempo devuelto contiene dos puntos, que son ilegales para su uso en los nombres de archivo, pero hay una manera de eliminarlos.

Use algo como:

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

Esto producirá un nombre de archivo como file_172215_01062009.txt

Actualización: Los comentarios a continuación tienen giros interesantes en este comando, así como algunos problemas potenciales que puede evitar.

aalaap
fuente
3
Pequeño gran consejo. Por cierto, si lo hace al revés, es decir: "file_20090601_172215", verá los archivos en el orden correcto en una lista alfabética.
55
También puede usar% time :: =% para eliminar los dos puntos.
user1686
2
¿Diría que la subcadena de fecha se rompería tan pronto como la configuración regional del sistema difiera de cuando se probó el script? Se podría incluso trabajo para el usuario de prueba y descanso en el segundo lugar de la escritura debido a los diferentes formatos de visualización fecha fijada ...
Oskar Duveborn
3
¡Cuidado con las horas 0 - 9! CMD establece el primer carácter de la hora en <SPACE>, en lugar de 0. El comando COPY anterior tendrá problemas si no encierra el nombre del archivo de destino entre comillas.
Evan Anderson
2
Tenga en cuenta que %DATE%y %TIME%son locales! Significa que en una máquina europea, obtienes DD.MM.YYYY. Arrgh
Pekka
14

Utilice las variables de entorno %DATE%y / o %TIME, opcionalmente, sustituya los caracteres que no están permitidos en los nombres de archivo, utilizando %name:from=to%( %TIME::=%eliminaría todos los dos puntos).

teoría »echo% date%
2009-06-01

teoría »echo% tiempo%
16: 30: 41,46

teoría »echo% tiempo :: =%
163052,17

teoría »echo% tiempo :: =,%
16,30,58,68

teoría »copia de seguridad de eco-% date% -% time :: = -%. zip
backup-2009-06-01-16-31-18,82.zip
usuario1686
fuente
1
wow, nunca se sabe sobre el truco: x = y. eso es realmente genial.
Eugene Katz
1
+1 para el truco: =, he estado en este juego desde MS-Dos 1 y es la primera vez que veo eso. ¡Sería aún mejor si pudieras cambiar varios caracteres también! :-)
shawty
Bueno, sólo fue añadido a cmd.exe en la serie de Windows NT ... Y si desea realizar múltiples cambios, sólo hay una cadena de set tmp=%tmp:x=y%etc
user1686
El contenido de% DATE% (número de archivos, contenido y pedidos) es específico de la localidad.
symcbean
4

La única forma confiable de obtener la fecha apropiada, independientemente de la configuración regional, es la solución 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
fuente
1

Use la variable% DATE% en el nombre del archivo.

También hay una variable% TIME%, pero contiene caracteres no permitidos en un nombre de archivo.

Aquí hay un ejemplo de cómo escribir una línea de texto en un nuevo archivo, donde el archivo creado tiene una fecha y hora en su nombre.

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