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.TXT
fueraFILE.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.txt
entonces 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
%~n1
Expanda %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.
%~x1
Expanda %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
- Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
- parámetros- Un argumento (o parámetro) de línea de comando es cualquier valor pasado a un script por lotes.
- sintaxis- Caracteres de escape, delimitadores y comillas.