我正在尝试从目录中获取具有特定扩展名的文件。为此,我使用以下批处理文件代码:
for %%f in (.\*.ext) do (
echo %%f
)
这工作正常,除非我有一个带有
.extsomething
扩展名的文件。$
通配符以仅获得精确匹配,但它没有显示任何结果。
for %%f in (.\*.ext$) do (
echo %%f
)
既然接受
*
通配符,为什么不考虑$
?只需添加一个
if
声明:
@echo off
for %%f in (*.ext) do (
if "%%~xf"==".ext" echo %%f
)
首先没有
$
通配符。所以它的意思是字面意思 $。
通配符与文件的两个名称相匹配。扩展名为
.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
@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
以下对我有用
Dir /b *.txt* > fileName.out