0
我試圖使用PowerShell輸出有關目錄樹的某些累積信息。使用PowerShell彙總文件系統目錄
這是盡我所能。
gci -r -ea Si ` | group { if ($_.PSIsContainer) {""} else {$_.Extension} } ` | select Name, Count, @{n="Measure"; e={$_.Group | measure Length -Sum -Average} }` | sort Count -desc ` | ft Name, Count, @{n="SizeMB"; e={"{0:N1}" -f ($_.Measure.Sum/1MB)}; a="right"} -Auto
這給了我:
Name Count SizeMB ---- ----- ------ .DOC 21660 6.988.6 .pdf 17323 11.893.1 11958 24.0 .rtf 2112 4.808.1 .tif 736 359.3 .msg 490 318.8 .ppt 260 168.5 .zip 219 2.239.6 .xls 216 78.5 [...]
其實,這是我在做的PowerShell的東西第一個嘗試,所以這可能不是做的最好的方式。有關方法和風格的評論值得歡迎。
- 我不喜歡
Select-Object
和Format-Table
之間的重複,這可以摺疊嗎? - 我想輸出幾個指標,但我不知道如何去做正確:
- 每個文件類型的最大/平均值嵌套深度
- 最大/平均路徑每個文件長度鍵入每個文件類型
- 從
Get-ChildItem
錯誤計數(拒絕訪問/路徑太長)這些測量結果也可以作爲一個最後的「全面」部分輸出,但列將是很好。 - 如果可能,我想留在一條管道中,除非有充分的理由不這樣做。
編輯:這是我的當前版本中,計算路徑長度和嵌套深度以及
gci -r -ea si ` | select ` Length, ` @{n="FileType"; e={ if ($_.PSIsContainer) {""} else {$_.Extension.ToLower()} }}, ` @{n="PathLength"; e={$_.FullName.Length}}, ` @{n="PathDepth"; e={$_.FullName.Split("\").Length - 1}} ` | group FileType ` | sort @{e="Count"; desc=$True}, FileType ` | select ` Name, ` Count, ` @{n="Length"; e={$_.Group | measure Length -sum -average} }, ` @{n="PathLength"; e={$_.Group | measure PathLength -max -average} }, ` @{n="PathDepth"; e={$_.Group | measure PathDepth -max -average} } ` | ft ` @{n="FileType"; e={$_.Name} }, ` Count, ` @{n="SumSizeMB"; e={"{0:N1}" -f ($_.Length.Sum/1MB)}; a="right"}, ` @{n="AvgSizeKB"; e={"{0:N2}" -f ($_.Length.Average/1MB)}; a="right"}, ` @{n="MaxPathLength"; e={[int]$_.PathLength.Maximum}; a="right"}, ` @{n="AvgPathLength"; e={[int]$_.PathLength.Average}; a="right"}, ` @{n="MaxPathDepth"; e={[int]$_.PathDepth.Maximum}; a="right"}, ` @{n="AvgPathDepth"; e={[int]$_.PathDepth.Average}; a="right"} ` -auto
謝謝,這是有道理的。讓我們看看是否有人想出了其他要點的答案。 – Tomalak 2013-02-25 11:49:58
看看你的編輯,我想在'Select-Object'和'Format-Table'之間進行分割並不是最糟糕的主意。它讓我感到無法將錯誤度量與其他數據一起輸出,但考慮到它在流水線上下文中似乎是合乎邏輯的。 – Tomalak 2013-02-25 14:38:27
你說得對。在「Select-Object」和「Format-Table」之間進行分割將提高易讀性和性能。 – 2013-02-25 15:13:17