批量查找文件扩展名

时间:2020-03-06 14:46:41  来源:igfitidea点击:

如果我使用以下方法遍历每个文件:

@echo off

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

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

解决方案

FOR命令具有多个内置开关,可用于修改文件名。请尝试以下方法:

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

有关更多详细信息,请使用"帮助"以获取修饰符的完整列表,其中有很多!

尽管不是很快就可以做到这一点:

@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

Sam的答案绝对是我们想要的最简单的答案。但我想补充一点:

不要在for()内设置变量,除非立即发布,否则不要马上使用它

setlocal ENABLEDELAYEDEXPANSION

并且我们使用而不是%来包装变量名。例如,

@echo off
setlocal ENABLEDELAYEDEXPANSION

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

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

)

退房

set /?

有关更多信息。

另一种选择是调用一个子例程来执行"设置",如Pax所示。