代码之家  ›  专栏  ›  技术社区  ›  Vhaerun

批查找文件扩展名

  •  18
  • Vhaerun  · 技术社区  · 16 年前

    如果我正在迭代每个文件,请使用:

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

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

    3 回复  |  直到 13 年前
        1
  •  34
  •   Sam Holloway    16 年前

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

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

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

        2
  •  6
  •   paxdiablo    16 年前

    这是可行的,尽管它不是盲目的快:

    @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
  •  2
  •   Community Egal    7 年前

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

    不要 set 内部变量 () A的 for 除非你之前已经发布了

    setlocal ENABLEDELAYEDEXPANSION
    

    你用的是 ! 而不是%来包装变量名。例如,

    @echo off
    setlocal ENABLEDELAYEDEXPANSION
    
    FOR %%f IN (*.*) DO (
    
       set t=%%f
       echo !t:~-3!
    
    )
    

    退房

    set /?
    

    更多信息。

    另一种选择是调用子例程来执行 设置 ,像 Pax 显示。