PowerShell中如何合并两个同结构表格输出为三列统一统计表
合并PowerShell文件统计结果为三列统一表格
原脚本拆分了文件数量、文件大小两个独立哈希表单独输出,才会生成两个互不关联的双列表。要得到三列统一的统计表格,有两种改法:
- 方法1:直接在统计阶段把同个扩展名的两个维度数据存在同一个自定义对象里,最后直接输出
- 方法2:保留原有两个哈希表的统计逻辑,最后遍历所有扩展名,关联两个哈希表的同键值组装结果输出
改法1:单哈希表存储全量统计数据(推荐)
直接替换原有脚本即可,统计逻辑更聚合,后续调整字段更方便:
# 初始化统计哈希表 $extStats = @{} # 递归获取D盘下所有文件 $Files = Get-ChildItem 'D:\' -Filter *.* -Recurse -File foreach ($file in $Files) { $ext = $file.Extension # 首次统计到该扩展名时初始化数据行 if (-not $extStats.ContainsKey($ext)) { $extStats[$ext] = [PSCustomObject]@{ Type = $ext Size = 0 Qty = 0 } } # 累加文件数量、总大小(单位GB) $extStats[$ext].Qty += 1 $extStats[$ext].Size += $file.Length / 1GB } # 格式化输出三列表格,大小保留2位小数 $extStats.Values | Select-Object Type, @{Name='Size';Expression={"{0:N2} GB" -f $_.Size}}, Qty | Format-Table -AutoSize
改法2:保留原有双哈希表逻辑,仅修改输出段
如果你不想改前面的统计循环,只需要把原脚本最后两行输出$Qty、$Size的代码替换成下面的内容即可:
# 提取所有出现过的扩展名去重 $allExt = $Qty.Keys + $Size.Keys | Select-Object -Unique # 关联两个哈希表的数据组装结果 $result = foreach ($ext in $allExt) { [PSCustomObject]@{ Type = $ext Size = "{0:N2} GB" -f $Size[$ext] Qty = $Qty[$ext] } } # 输出对齐的三列表格 $result | Format-Table -AutoSize
运行后输出效果和预期一致:
Type Size Qty ---- ---- --- .jpg 10.00 GB 10000 .png 30.00 GB 30000 .tif 40.00 GB 40000
内容的提问来源于stack exchange,提问作者Amin Nazeri
相关产品推荐
相关产品推荐

