PowerShell脚本问题:如何将多文件夹文件统计合并为单表格
解决PowerShell合并文件夹文件计数表格的问题
我来帮你搞定这个问题!你遇到的错误是因为直接尝试对单个PSObject执行加法操作——PowerShell里单个对象并不支持这种+=的累加方式。下面给你两种简单可行的解决方案:
方案一:初始化数组并累加对象
先创建一个空数组来存储所有结果对象,循环中把每个文件夹的统计对象添加到数组里,最后统一输出表格:
$folders = @("c:\temp", "C:\temp\tosh") # 初始化一个空数组用于存储结果 $results = @() foreach ($folder in $folders) { $folderFiles = Get-ChildItem -Path $folder -File # 用更简洁的方式创建自定义对象(替代New-Object) $obj = [PSCustomObject]@{ "Folder Name" = $folder # 可以直接用你想要的列名 Count = $folderFiles.Count } # 将对象添加到数组中 $results += $obj } # 一次性输出合并后的表格 $results | Format-Table -AutoSize
注意:这种方法对于少量文件夹完全没问题,但如果文件夹数量非常多,
+=操作会每次创建新数组,效率会稍低。
方案二:用管道收集对象(推荐)
利用PowerShell的管道特性自动收集所有结果对象,代码更简洁,效率也更高:
$folders = @("c:\temp", "C:\temp\tosh") # 通过ForEach-Object管道生成所有统计对象并收集 $results = $folders | ForEach-Object { $folderFiles = Get-ChildItem -Path $_ -File [PSCustomObject]@{ "Folder Name" = $_ Count = $folderFiles.Count } } # 输出合并后的表格 $results | Format-Table -AutoSize
为什么你之前的尝试会报错?
如果没有提前把$results初始化为数组(@()),第一次赋值$results = $obj会让$results变成单个PSObject类型。当你第二次执行$results += $obj时,PowerShell会尝试对两个PSObject执行加法操作,但PSObject并没有定义加法方法,所以就会抛出“PSObject does not contain a method named 'op_Addition'”的错误。
内容的提问来源于stack exchange,提问作者Rob Berry
相关产品推荐
相关产品推荐

