批量查找文件扩展名

时间:2008-09-26 11:15:31

标签: windows batch-file dos

如果我使用以下方法迭代每个文件:

@echo off

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

我怎么能打印每个文件的扩展名?我尝试将%% f分配给临时变量,然后使用代码:echo "%t:~-3%"进行打印,但没有成功。

3 个答案:

答案 0 :(得分:34)

FOR命令有几个内置开关,允许您修改文件名。请尝试以下方法:

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

有关详细信息,请使用help for获取修改器的完整列表 - 有很多内容!

答案 1 :(得分:6)

虽然速度不快,但仍有效:

@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 :(得分:3)

Sam的回答绝对是你想要的最简单的答案。但我想补充一下:

set ()的{​​{1}}内的变量不要for并期望立即使用它,除非您之前已发布

setlocal ENABLEDELAYEDEXPANSION

并且您使用!而不是%来包装变量名称。例如,

@echo off
setlocal ENABLEDELAYEDEXPANSION

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

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

)

结帐

set /?

了解更多信息。

另一种方法是调用子例程来执行set,就像Pax节目一样。