2016-07-21 35 views
1

我想获得一个只有给定扩展名的文件的目录列表。乍一看,这似乎是一个简单的事,但是看看这个简单的例子:如何匹配Windows /命令行/文件打开对话框下的确切文件扩展名?

C:\CODE\metcal>dir /b *.exe 
metcal.exe 
metcal.exe1 

注意,这个返回metcal.**exe**metcal.**exe1**火柴。

用Python文件类似的事情发生了:

C:\CODE\metcal>dir /b *.py 
metcal.py 
metcal.pyc 

通知再次Windows已经确定*.py采取任何与*.py所以它抓住了.pyc文件以及启动。

有没有办法让只有完全匹配的扩展?在上面的Python文件的例子,我想下面的发生(很明显,正确的语法*的.py取代)

C:\CODE\metcal>dir /b *.py 
metcal.py 

作为一个说明的Windows不是那么简单,因为它似乎下的匹配。

*.exe匹配foo.exe, foo.exe1, foo.exeabcdefoo.exe.bak

有上,这样类似的是都涉及到长/短文件名的其他问题。这里的* .py和* .pyc示例不应该引入名称修改机制。

**我已经尝试在XP和Win7的机器,这种行为是不是在命令提示符一致和文件打开的对话框。这种不一致的行为让我怀疑这个问题与somekind的设置有关。 **

+0

通过“DOS”你的意思是Windows命令提示符'cmd.exe',对? – aschipfl

+1

我认为给定的模式也是针对8.3格式的文件名进行检查的,所以'* .exe'也匹配'* .exe1';如果扩展名长度小于3个字符,比如'* .py',它似乎可以工作,像'* .pyc'这样的文件不会被返回 - 至少在我的Windows 7 x64机器上...为了精确过滤,我使用'findstr',像这样:'dir/B“* .exe”| findstr/L/E“.doc”' – aschipfl

+2

[通配符获取文件的确切扩展名]可能的重复(http://stackoverflow.com/questions/20761052/wildcard-to-get-files-by-exact-extension) –

回答

0

所以,如果你想获得只有那些扩展(.py.pyc),你应该尝试像这样:

@echo off 
dir /b *.py* 
pause 
+0

没问题。如果我要求* .py我期望只有.py扩展名,但我得到.py AND .pyc ...和.pyo。我想知道的只是获取.py的语法。 – Hucker

相关问题