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
修正说明
- 将
Get-ChildItem的路径改为当前循环的$DGfolder,确保每次只统计单个文件夹的内容。 - 用
+=操作符向数组$FolderStats添加元素,无需手动维护索引,避免越界错误。 - 新增了
PSCustomObject将文件夹路径与统计结果绑定,输出结果更清晰易读。 - 处理了文件夹为空或无权限访问时
Sum为$null的情况,避免格式化错误。
内容的提问来源于stack exchange,提问作者user5305155
相关产品推荐
相关产品推荐

