Agregue una marca de fecha y hora al archivo copiado usando Windows Batch

Agregue una marca de fecha y hora al archivo copiado usando Windows Batch

Pensé que esto sería simple pero parece un desafío mayor de lo que pensaba.

Quiero copiar y pegar un archivo con una marca de tiempo adjunta. Obtengo la marca de tiempo usando este código:

set hournum=%time:~0,2%

if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)

Set FileAffected=%1
echo %FileAffected:~0,-1%%timeback%

Esto haría que el archivo FILE.TXTfueraFILE.TXT_2015-03-05_11h56m32s

Pero obviamente quiero que así seaFILE_20150305_11h56m32s.TXT

La extensión del archivo puede ser cualquier extensión o longitud. Gracias por cualquier ayuda.

EDITAR: FileAffected se pasa entre comillas, así que simplemente las eliminé con ~0,-1.

Descubrí que si hago esto:

FOR /f %%i IN (%FileAffected%) DO (
ECHO filename=%%~fi
ECHO fileextension=%%~xi
)

Si hago eco de FileAffected, obtengo el nombre de la ruta completa con espacios. Pero si uso el comando FOR /F, el nombre del archivo vuelve truncando cualquier cosa después de un espacio. Incluso agregar comillas adicionales a la variable "%FileAffected" en el comando "IN" no soluciona el problema, ni agregar comillas alrededor de fi o xi.

Respuesta1

¿Cómo agrego la fecha y la hora como sufijo a un nombre de archivo?

Utilice el siguiente archivo por lotes:

@echo off
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
echo %~n1%timeback%%~x1

Producción:

F:\test>test file.txt
file_3/01_18h07m40s.txt

Si su nombre de archivo contiene espacios, por ejemplo, file with space.txtentonces necesitallamarel archivo por lotes con "s alrededor del nombre del archivo, de la siguiente manera:

F:\test>test "file with space.txt"
file with space_3/01_18h07m56s.txt

Extensiones de parámetros

%~n1Expanda %1 a un nombre de archivo sin extensión de archivo C:\utils\MyFile o, si solo hay una ruta (sin barra invertida al final), la última carpeta en esa ruta.

%~x1Expanda %1 a una extensión de archivo únicamente: .txt

FuenteArgumentos de la línea de comando (parámetros)


Usando "comillas dobles

Si un solo parámetro contiene espacios, aún puede pasarlo como un elemento encerrándolo entre "comillas"; esto funciona bien para nombres de archivos largos.

Si se utiliza un parámetro para proporcionar un nombre de archivo como este:

MyBatch.cmd "C:\Program Files\My Data File.txt"

Estos parámetros serán:

%0 = Mi lote

%1 = "C:\Archivos de programa\Mi archivo de datos.txt"

FuenteSintaxis: caracteres de escape, delimitadores y comillas


Otras lecturas

información relacionada