2008-09-26 16 views
17

Jeśli jestem Iterowanie nad każdego pliku przy użyciu:plik wsadowy znaleźć przedłużenie

@echo off 

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

jak mogę wydrukować rozszerzenie każdego pliku? Próbowałem przypisać %% f do zmiennej tymczasowej, a następnie użyć kodu: echo "%t:~-3%", aby wydrukować, ale bez powodzenia.

Odpowiedz

32

Polecenie FOR ma kilka wbudowanych przełączników, które pozwalają modyfikować nazwy plików. Spróbuj wykonać następujące czynności:

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

celu uzyskania dalszych informacji, należy help for, aby uzyskać pełną listę modyfikatorów - istnieje sporo!

5

To działa, choć nie jest oślepiająco szybko:

@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 odpowiedź jest zdecydowanie najłatwiejszy do tego, co chcesz. Ale chciałem dodać:

Czy nie set zmienną wewnątrz „s of a for() i spodziewać się go używać od razu, o ile nie zostały wcześniej wydane

setlocal ENABLEDELAYEDEXPANSION 

i używasz ! zamiast % zawija nazwę zmiennej. Na przykład,

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

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

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

) 

Wyjazd

set /? 

aby uzyskać więcej informacji.

Inną opcją jest wywołanie podprogramu w celu wykonania pokazów set, takich jak Pax.