2015-04-03 46 views
0

由於Get-ChildItem -Path *.exe將顯示當前目錄中的所有可執行文件,爲什麼Get-ChildItem -File -Include *.exe不會返回相同的結果?兩個命令都在同一個目錄中執行,第一個命令(使用-Path)返回可執行文件的列表,但第二個命令(使用-File)不會。 (gci -File將列出一切,包括EXE)PowerShell 3.0中的相同命令的不同結果

Get-ChildItem -File | gm #=> FileInfo 
Get-ChildItem *.* | gm #=> DirectoryInfo and FileInfo 

所有命令波紋管返回類型的對象的FileInfo

Get-ChildItem -File 
Get-ChildItem *.* -Include *.exe 
Get-ChildItem -Path *.exe 

但混合 - 文件和-Include/-Exclude沒有返回,即使-include正在尋找一個文件類型:

Get-ChildItem -File -Include *.exe #=> Returns nothing 

我在這裏錯過了什麼?

+0

亞歷山大你肯定有路你查詢exe文件的任何exe文件,你考'GCI型濾波器-include的* .exe -Recurse'是尋找exe文件中的所有目錄和子目錄 – powershell 2015-04-03 13:23:35

+0

是的,我有道路上的exe。 gci -Path * .exe返回它們的列表。運行gci -File -Recurse -Include * .exe也是如此,但它也包含子目錄中的所有exes – 2015-04-03 14:34:17

回答

0

來自的TechNet:

的包括僅當該命令包含 Recurse參數或路徑導致目錄的內容,如C,使得 參數是有效的:\視窗*,其中通配符字符指定C:\ Windows目錄中的 內容。

換句話說,使用Include參數時,除非使用Path或Recurse參數,否則它不會自動考慮所有文件和目錄。請注意,僅使用Path參數時,必須包含通配符以強制它考慮該路徑下的文件和目錄結果。我想不出爲什麼會這樣。

爲了讓您的例子來工作,你會用下列之一(我丟棄文件參數,因爲它似乎是多餘的):

Get-ChildItem -Path * -Include *.exe 
Get-ChildItem -Include *.exe -Recurse 

我的回答你的問題的要點是意見tho - 從我所看到的Include參數應該被刪除 - 或者它的行爲被修復以匹配Get-ChildItem cmdlet在沒有參數的情況下的默認行爲。爲什麼它會以這種方式工作,可能有一個很好的解釋,但我不知道這一點。

如果你把從你的例子包括參數,行爲/結果更有意義(我):

Get-ChildItem -Path *.exe 

在這種情況下,我們只需要排除參數來有效地覆蓋所有的濾波要求。喜歡的東西:

Get-ChildItem -Path *.exe -Exclude *system* 
相關問題