我正在尝试使用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
答案 0 :(得分:1)
要折叠Select-Object
和Format-Table
,请尝试:
dir -r -ea si | group extension | sort count -desc | `
ft name, count, @{n="SizeMB";E={"{0:N1}" -f (($_.group | measure length -sum).sum / 1MB)}; a="right"} -auto
至于其他指标(1和2),这应该可以解决问题:
dir -r -ea si | group extension | sort count | `
ft name, count, @{n="SizeMB";E={"{0:N1}" -f (($_.group | measure length -sum).sum / 1MB)}; a="right"}, `
@{n="AVGPathLength";E={($_.group | select @{n="fullpathlength";e={$_.fullname.length}} | measure-object -property fullpathlength -average).average }}, `
@{n="MaxPathLength";E={($_.group | select @{n="fullpathlength";e={$_.fullname.length}} | measure-object -property fullpathlength -maximum).maximum }}, `
@{n="AVGNestingDepth";E={($_.group | select @{n="nestingdepth";e={$_.fullname.split("\").length -3}} | measure-object -property nestingdepth -average).average }}, `
@{n="MaxNestingDepth";E={($_.group | select @{n="nestingdepth";e={$_.fullname.split("\").length -3}} | measure-object -property nestingdepth -maximum).maximum }} -auto
我认为没有明显的方法来完成指标3.