2008-09-26 155 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所示。