我想获得一个只有给定扩展名的文件的目录列表。乍一看,这似乎是一个简单的事,但是看看这个简单的例子:如何匹配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.exeabcde
但不foo.exe.bak
有上,这样类似的是都涉及到长/短文件名的其他问题。这里的* .py和* .pyc示例不应该引入名称修改机制。
**我已经尝试在XP和Win7的机器,这种行为是不是在命令提示符一致和文件打开的对话框。这种不一致的行为让我怀疑这个问题与somekind的设置有关。 **
通过“DOS”你的意思是Windows命令提示符'cmd.exe',对? – aschipfl
我认为给定的模式也是针对8.3格式的文件名进行检查的,所以'* .exe'也匹配'* .exe1';如果扩展名长度小于3个字符,比如'* .py',它似乎可以工作,像'* .pyc'这样的文件不会被返回 - 至少在我的Windows 7 x64机器上...为了精确过滤,我使用'findstr',像这样:'dir/B“* .exe”| findstr/L/E“.doc”' – aschipfl
[通配符获取文件的确切扩展名]可能的重复(http://stackoverflow.com/questions/20761052/wildcard-to-get-files-by-exact-extension) –