2008-09-26 26 views
17

kullanıyorum her dosya üzerinde yineleme am mı:toplu bulmak dosya uzantısı

@echo off 

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

nasıl her dosyanın uzantısı baskı olabilir? Geçici bir değişkene %% f atamayı ve daha sonra basmak için echo "%t:~-3%" kodunu kullanmayı denedim, ancak başarılı olmadı.

cevap

32

FOR komutu, dosya adlarını değiştirmenize izin veren birkaç yerleşik anahtara sahiptir. Aşağıdaki deneyin: Daha fazla ayrıntı için

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

değiştiricilere tam bir listesini elde etmek için help for kullanmak - epeyce vardır!

5

Bu kör edici hızlı olmasa da, çalışır:

@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 'ın cevabı kesinlikle ne istediğinizi kolay yoldur. Ama eklemek istedim:

yapmayın set bir değişkeni bir for ait () 's içinde ve daha önce

setlocal ENABLEDELAYEDEXPANSION 

yayınlanan sürece, hemen kullanacağımız bekliyoruz ve bunun yerine ! kullandığınız değişken adını sarmalamak için%. Örneğin, daha fazla bilgi için dışarı

set /? 

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

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

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

) 

kontrol edin.

Diğer alternatif, Pax gösterileri gibi set yapmak için bir alt yordamı çağırmaktır.