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.

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top