2008-09-26 18 views
17

Si estoy interactuando sobre cada archivo usando:lotes extensión de archivo hallazgo

@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 usar el código: echo "%t:~-3%" para imprimir pero sin éxito.

Respuesta

32

El comando FOR tiene varios conmutadores integrados que le permiten modificar los nombres de los archivos. Pruebe lo siguiente:

@echo off 
for %%i in (*.*) do echo "%%~xi" 

Para más detalles, utilice help for para obtener una lista completa de los modificadores - hay unos cuantos!

5

Esto funciona, aunque no es tan rápidos:

@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 
2

Sam 's respuesta es sin duda el más fácil de lo que desea. Pero quería añadir:

¿No set una variable dentro de los () 's de un for y espera utilizar de inmediato, a menos que haya emitido anteriormente

setlocal ENABLEDELAYEDEXPANSION 

y se está utilizando en lugar ! de% para envolver el nombre de la variable. Por ejemplo,

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

FOR %%f IN (*.*) DO (

    set t=%%f 
    echo !t:~-3! 

) 

Salida

set /? 

para obtener más información.

La otra alternativa es llamar a una subrutina para hacer el set, como muestra Pax.