2008-09-26 3 views
17

내가 사용하여 각 파일을 반복하고있는 경우 :배치 찾기 파일 확장자

@echo off 

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

는 어떻게 각 파일의 확장자를 인쇄 할 수 있을까? 임시 변수에 %% f를 할당 한 다음 코드를 사용하여 시도 : echo "%t:~-3%" 인쇄했지만 성공하지 못했습니다.

답변

32

FOR 명령에는 파일 이름을 수정할 수있는 몇 가지 기본 제공 스위치가 있습니다. 다음을 시도해보십시오 자세한 내용

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

이, 수식의 전체 목록을 얻을 수 help for를 사용 - 꽤 몇 가지가 있습니다!

5

이것은 눈부시게 빠른 아니다 있지만, 작동 :

@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의 대답은 확실히 당신이 원하는 무엇을위한 가장 쉬운 방법입니다. 하지만 추가하고 싶었 :

는하지 마십시오 set 변수를 for() 년대 안에 당신이 이전에

setlocal ENABLEDELAYEDEXPANSION 

를 발행하지 않는 한, 바로 사용할 것으로 예상하고 대신 !를 사용하는 of %를 사용하여 변수 이름을 래핑합니다. 예를 들어, 추가 정보를 알아

set /? 

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

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

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

) 

확인합니다.

다른 대안은 Pax과 같이 set을 수행하는 서브 루틴을 호출하는 것입니다.