extensión de archivo de búsqueda por lotes
-
02-07-2019 - |
Pregunta
Si estoy iterando sobre cada archivo usando:
@echo off
FOR %%f IN (*\*.\**) DO (
echo %%f
)
¿cómo podría imprimir la extensión de cada archivo? Intenté asignar %% f a una variable temporal y luego usé el código: echo "% t: ~ -3% "
para imprimir pero sin éxito.
Solución
El comando FOR tiene varios modificadores incorporados que le permiten modificar los nombres de los archivos. Intenta lo siguiente:
@echo off
for %%i in (*.*) do echo "%%~xi"
Para obtener más detalles, use help for
para obtener una lista completa de los modificadores. ¡Hay unos cuantos!
Otros consejos
Esto funciona, aunque no es increíblemente rápido:
@echo off
for %%f in (*.*) do call :procfile %%f
goto :eof
:procfile
set fname=%1
set ename=
:loop1
if "%fname%"=="" (
set ename=
goto :exit1
)
if not "%fname:~-1%"=="." (
set ename=%fname:~-1%%ename%
set fname=%fname:~0,-1%
goto :loop1
)
:exit1
echo.%ename%
goto :eof
La respuesta de Sam es definitivamente la más fácil para lo que deseas. Pero quería agregar:
No establezca
una variable dentro de los ()
de un para
y espere usarla de inmediato, a menos que tenga previamente emitido
setlocal ENABLEDELAYEDEXPANSION
y está utilizando !
en lugar de% para ajustar el nombre de la variable. Por ejemplo,
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
set t=%%f
echo !t:~-3!
)
Echa un vistazo
set /?
para más información.
La otra alternativa es llamar a una subrutina para hacer el set
, como Pax muestra .