2016-07-21 33 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

相關問題