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

PowerShell脚本问题:遍历文件夹统计异常及数组越界报错

问题解决:PowerShell统计指定文件夹的文件数量与大小

错误原因分析

  • 遍历目标错误:原脚本中Get-ChildItem的-Path参数用了整个文件夹列表$DGfolderlist,导致每次循环都会遍历所有文件夹,最终得到的是所有文件夹的统计总和,而非单个文件夹的独立数据。
  • 数组索引越界:原脚本手动维护索引$int并通过$FolderSize[$int]赋值,空数组初始长度为0,后续循环中数组未自动扩展,当索引超过当前数组长度时就会触发Index was outside the bounds of the array错误。

修正后的脚本

$DGfolderlist = Get-Content -Path C:\DiskGroupsFolders\DGFoldersTEST.txt

$FolderStats = @()

foreach ($DGfolder in $DGfolderlist) {
    # 统计当前文件夹的文件数量与总大小
    $stats = Get-ChildItem -Path $DGfolder -File -Recurse -Force -ErrorAction SilentlyContinue |
             Measure-Object -Property Length -Sum |
             Select-Object -Property Count, 
                 @{Name='Size(MB)'; Expression={ if ($_.Sum) { '{0:N2}' -f ($_.Sum/1mb) } else { '0.00' } }}

    # 将文件夹路径与统计结果合并,方便查看
    $result = [PSCustomObject]@{
        FolderPath = $DGfolder
        FileCount = $stats.Count
        TotalSizeMB = $stats.'Size(MB)'
    }

    $FolderStats += $result

    # 实时输出当前文件夹的统计结果
    Write-Host "文件夹: $DGfolder"
    Write-Host "文件数量: $($stats.Count) | 总大小: $($stats.'Size(MB)') MB`n"
}

# 可选:输出所有统计结果的汇总表格
$FolderStats | Format-Table -AutoSize

修正说明

  1. 将Get-ChildItem的路径改为当前循环的$DGfolder,确保每次只统计单个文件夹的内容。
  2. 用+=操作符向数组$FolderStats添加元素,无需手动维护索引,避免越界错误。
  3. 新增了PSCustomObject将文件夹路径与统计结果绑定,输出结果更清晰易读。
  4. 处理了文件夹为空或无权限访问时Sum为$null的情况,避免格式化错误。

内容的提问来源于stack exchange,提问作者user5305155

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:55:17