批量查找文件扩展名

18

如果我正在使用以下方式迭代每个文件:

@echo off

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

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

3个回答

36

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

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

更多详细信息,请使用help for获取所有修改器的完整列表 - 有相当多的修改器!


7

这个方法可行,尽管速度不是非常快:

@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

3

Sam的回答绝对是你想要的最简单的方法。但我还想补充一点:

不要在for()中设置变量并期望立即使用它,除非你之前已经发出了相应的命令。

setlocal ENABLEDELAYEDEXPANSION

您正在使用!而非%括起变量名。例如,
@echo off
setlocal ENABLEDELAYEDEXPANSION

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

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

)

请查看

set /?

更多信息请参考。

另一种选择是调用子程序来执行 set 操作,就像 Pax 所示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接