2013-10-23 44 views
3

相當直接的問題,爲什麼Get-ChildItem -recurse會向Explorer報告的文件夾數量完全不同?Get-ChildItem向資源管理器報告不同的值

例如,當您考慮通過所有子文件夾遞歸時,我有一個數據驅動器與大量的文件夾。 Explorer報告一個數字,Get-ChildItem報告完全不同的東西?

我正在密集和失去一些東西?隱藏文件夾等不顯示在資源管理器中,並且Get-ChildItem未使用-force標誌,因此它應顯示相同的結果?

+0

你確定你沒有這些文件夾中的一些文件以及因爲命令你列出的將會報告文件和文件夾。您可以使用Attributes參數將其限制爲僅限文件夾。例如「Get-ChildItem -Recurse -Attributes d」。 –

+0

我正在使用管道上的PSIsContainer – PnP

+0

您究竟具體如何計算?你期望什麼數字?您是否嘗試過較小的測試用例? – Eris

回答

3

無論您是否顯示隱藏的文件夾,都不會影響您從Windows資源管理器獲取的文件夾數量,該文件夾將計算您有權列出其父文件夾的所有文件夾。然而,獲取-ChildItem-Force參數不會總是給你相同的計數爲Windows資源管理器,因爲-Force還計算結點,並且Windows資源管理器沒有。

除非我忽視的東西,這應該總是給你你從Windows資源管理器獲得相同的計數:

Get-ChildItem -Recurse -Force | ?{$_.PSIsContainer -and ($_.Attributes -notmatch 'ReparsePoint')} | Measure 
+2

我對隱藏文件的理論絕對是假的,我會刪除我的答案。你的答案很接近(從我+1),但仍然沒有給我的系統上的大目錄準確的結果(關閉幾個)。無論如何,通過將其更改爲「Get-ChildItem -Recurse -Force -Attribute Directory +!ReparsePoint」,您可以更快地做到這一點。至於你是流水線每一個文件和目錄,並做了正則表達式檢查,這是相當昂貴的:) – latkin

+0

@latkin啊,這就是爲什麼它不會讓我張貼評論,我試圖添加在您的答案。 :)事實上,我確實用** - 屬性**來嘗試它,除了我使用**的屬性*而不是** - Force ** ...,但是得到了和我一樣的結果** - Force **和**哪裏**過濾器。我會在這裏添加評論: –

+1

我想我看到了問題。它會*遞歸到交接點,不包括交接點本身,但包括它們的子目錄(您認爲Explorer處理隱藏文件夾的方式)。我懷疑你的'Program Files(x86)'有連接點到具有子目錄的目錄,而我的不是。我也嘗試按屬性過濾,但得到了與我的答案中的命令相同的結果:'Get-ChildItem -Recurse -Attributes D + H +!ReparsePoint,D +!H +!ReparsePoint | Measure'。我認爲遞歸函數對於獲得與Explorer相同的計數是必要的。 –