2008-09-26 161 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 

並且使用的是!代替的%來包裝變量名稱。例如,

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

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

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

) 

退房

set /? 

獲取更多信息。

另一種方法是調用子程序來執行set,如Pax所示。