【问题标题】:Get all files with a specific extension获取具有特定扩展名的所有文件
【发布时间】:2019-06-14 12:34:19
【问题描述】:

我正在尝试从目录中获取具有特定扩展名的文件。为此,我使用以下批处理文件代码:

for %%f in (.\*.ext) do (
     echo %%f
)

这很好用,除非我有一个扩展名为 .extsomething 的文件。
我尝试添加 $ 通配符以仅获得完全匹配,但它没有显示任何结果。

for %%f in (.\*.ext$) do (
     echo %%f
)

既然接受了* 通配符,为什么不考虑$
如何仅获取具有确切扩展名的文件?

【问题讨论】:

  • $ 更像是一个正则表达式选项。您需要将 DIR 命令的输出通过管道传输到 FINDSTR 以具有一些有限的正则表达式功能。
  • 文件的短文件名与您的模式匹配。它只会在短名称中使用扩展名的前三个字母。 Filename.ext 包括通配符与短版本和长版本匹配。
  • @catcat 我很难听懂你想告诉我的内容
  • @GarryWhite 我把它变成了一个更长的答案。这是您的实际问题既然接受了 * 通配符,为什么不考虑 $?。答案是——$ 不是通配符。
  • @catcat 你说得对,谢谢你的解释,我也根据我的真实要求更新了我的问题。

标签: batch-file cmd


【解决方案1】:

只需添加一个if 声明:

@echo off
for %%f in (*.ext) do (
    if "%%~xf"==".ext" echo %%f
)

【讨论】:

  • 它不返回任何结果:/
  • @GarryWhite 你的目录中有.ext 的文件吗?
  • 我的错,我忘了用实际的扩展名替换 ext :) 我会接受这个答案,因为它最接近我的初始代码风格
  • 第一种方法:使用if /I "%%~xf"==".ext" 使其不区分大小写。对于第二种方法:findstr /v ".ext?" 实际上应该读取 findstr /v "\.ext$"\. 匹配文字 .$ 将匹配锚定到字符串的末尾)...
  • @aschipfl 实际上,这将摆脱 .ext 部分并保留 .extens,但无论如何,答案的那部分现在不再相关,因此将其删除,因为 OP 专注于第一个部分答案。
【解决方案2】:

首先没有$ 通配符。所以它的意思是一个文字 $

通配符与文件的两个名称匹配。扩展名为.txttttt 的文件的短扩展名为.txt。因为dir 中的第一个文件与另一个文件没有冲突,并且可以用它的 8.3 长名称表示,所以它没有短名称,因为它的长名称是有效的。 (PS 第二个 text.txt 的前导空格使用\\?\C:\ test.txt)。

C:\>dir /x t*.txt
 Volume in drive C is Windows
 Volume Serial Number is 9EE7-AAA5

 Directory of C:\

17/01/2019  11:23 AM               250              test.txt
26/02/2018  07:30 PM           195,776 TEST~1.TXT     test.txt
21/01/2019  05:50 PM                 5 TEST~2.TXT   test.txtttt
               3 File(s)        196,031 bytes
               0 Dir(s)  752,444,428,288 bytes free

Command to run a .bat file

【讨论】:

    【解决方案3】:

    使用Where 命令:

    @For /F "Delims=" %%A In ('Where .:*.ext 2^>Nul') Do @Echo %%A
    

    【讨论】:

    • 您需要(暂时)删除变量PATHEXT,以免获取*.ext.exe*.ext.com 等文件......
    • @aschipfl,我会相信你的话,因为我现在没有电脑可以检查它,我永远不会碰那个变量,即使是暂时的 i>,只有傻瓜才会创建以 .??? 命名的文件作为其名称的一部分!
    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2010-12-03
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多