【问题标题】:batch find file extension批量查找文件扩展名
【发布时间】:2010-09-13 10:06:25
【问题描述】:

如果我使用 :

遍历每个文件
@echo off

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

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

【问题讨论】:

    标签: windows batch-file dos


    【解决方案1】:

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

    不要在for() 中使用set 变量并期望立即使用它,除非您之前已发布

    setlocal ENABLEDELAYEDEXPANSION
    

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

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

    退房

    set /?
    

    了解更多信息。

    另一种选择是调用一个子程序来执行set,就像Pax 显示的那样。

    【讨论】:

      【解决方案2】:

      这行得通,虽然速度不是很快:

      @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】:

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

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

        如需更多详细信息,请使用help for 获取完整的修饰符列表 - 有很多!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-04
          • 1970-01-01
          • 1970-01-01
          • 2015-12-12
          • 2013-07-13
          • 2017-08-22
          • 1970-01-01
          相关资源
          最近更新 更多