我想獲得一個只有給定擴展名的文件的目錄列表。乍一看,這似乎是一個簡單的事,但是看看這個簡單的例子:如何匹配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) –