You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:45:42