我正在尝试使用 PowerShell 输出有关目录树的一些累积信息。
这是据我所知。
gci -r -ea Si ` | 组 { if ($_.PSIsContainer) {""} else {$_.Extension} } ` | 选择名称、计数、@{n="Measure"; e={$_.组 | 测量长度 -Sum -Average} }` | 排序计数-desc` | ft 名称、计数、@{n="SizeMB"; e={"{0:N1}" -f ($_.Measure.Sum / 1MB)}; a="right"} -自动
这给了我:
名称 计数 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,所以这可能不是最好的方法。欢迎对方法和风格发表评论。
- 我不喜欢 and 之间的重复
Select-Object
,Format-Table
这可以折叠吗? - 我想输出更多指标,但我不确定如何正确执行:
- 每个文件类型的最大/平均嵌套深度
- 每个文件类型的最大/平均路径长度
- 每个文件类型的错误计数
Get-ChildItem
(访问被拒绝/路径太长)
- 这些测量结果也可以在最后作为“整体”部分输出,但列会很好。
- 如果可能的话,我想留在一个管道中,除非有充分的理由不这样做。
编辑:这是我当前的版本,计算路径长度和嵌套深度
gci -r -ea si ` | 选择` 长度,` @{n="文件类型"; e={ if ($_.PSIsContainer) {""} else {$_.Extension.ToLower()} }}, ` @{n="路径长度"; e={$_.FullName.Length}},` @{n="路径深度"; e={$_.FullName.Split("\").Length - 1}} ` | 组文件类型` | 排序@{e="计数"; desc=$True},文件类型` | 选择` 姓名,` 数,` @{n="长度"; e={$_.组 | 测量长度 -sum -average} }, ` @{n="路径长度"; e={$_.组 | 测量路径长度 -max -average} }, ` @{n="路径深度"; e={$_.组 | 测量路径深度 -max -average} } ` | 英尺` @{n="文件类型"; e={$_.Name} }, ` 数,` @{n="SumSizeMB"; e={"{0:N1}" -f ($_.Length.Sum / 1MB)}; 一个=“对”},` @{n="AvgSizeKB"; e={"{0:N2}" -f ($_.Length.Average / 1MB)}; 一个=“对”},` @{n="MaxPathLength"; e={[int]$_.PathLength.Maximum}; 一个=“对”},` @{n="平均路径长度"; e={[int]$_.PathLength.Average}; 一个=“对”},` @{n="MaxPathDepth"; e={[int]$_.PathDepth.Maximum}; 一个=“对”},` @{n="平均路径深度"; e={[int]$_.PathDepth.Average}; 一个=“对”}` -汽车