获取具有特定扩展名的所有文件

问题描述 投票:0回答:4

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

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

这工作正常,除非我有一个带有

.extsomething
扩展名的文件。
我尝试添加
$
通配符以仅获得精确匹配,但它没有显示任何结果。

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

既然接受

*
通配符,为什么不考虑
$

如何只获取具有确切扩展名的文件?

batch-file cmd
4个回答
9
投票

只需添加一个

if
声明:

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

1
投票

首先没有

$
通配符。所以它的意思是字面意思 $

通配符与文件的两个名称相匹配。扩展名为

.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

请参阅运行 .bat 文件的命令


1
投票
使用“Where”命令:
@For /F "Delims=" %%A In ('Where .:*.ext 2^>Nul') Do @Echo %%A

[编辑/]

根据aschipfl的评论,您可以使用更稳健的方法,首先清空PATHEXT的内容:

@For /F "Delims=" %%A In ('(Set PATHEXT^=^) ^& %__AppDir__%where.exe .:*.ext 2^>NUL') Do @Echo %%A

0
投票

以下对我有用

Dir /b *.txt* > fileName.out
© www.soinside.com 2019 - 2024. All rights reserved.