PowerShell脚本开发:如何获取多文件夹及子文件夹的路径、文件数与大小
PowerShell递归统计文件夹路径、文件数及总大小
修改后的完整脚本
$folders = @('C:\Directory1','C:\Directory2','C:\Directory3') $output = foreach ($rootFolder in $folders) { # 获取当前根目录及其所有子文件夹(含空文件夹) $allFolders = Get-ChildItem -Path $rootFolder -Directory -Recurse -Force $allFolders += Get-Item -Path $rootFolder # 加入根目录本身 # 一次性递归获取所有文件,按所在文件夹分组统计 $allFiles = Get-ChildItem -Path $rootFolder -File -Recurse $fileStats = $allFiles | Group-Object -Property DirectoryName -AsHashTable -AsString # 遍历每个文件夹,匹配统计数据 $allFolders | ForEach-Object { $folderPath = $_.FullName $folderFiles = $fileStats[$folderPath] [pscustomobject]@{ Folder = $folderPath FileCount = if ($folderFiles) { $folderFiles.Count } else { 0 } TotalSizeBytes = if ($folderFiles) { ($folderFiles | Measure-Object -Property Length -Sum).Sum } else { 0 } TotalSizeMB = if ($folderFiles) { [math]::Round(($folderFiles | Measure-Object -Property Length -Sum).Sum / 1MB, 2) } else { 0 } } } } # 导出为CSV(-NoTypeInformation避免添加PowerShell类型头) $output | Export-Csv -Path C:\Temp\Folderinfo.csv -NoTypeInformation
关键说明
- 覆盖所有文件夹:通过
Get-ChildItem -Directory -Recurse获取子文件夹,再手动加入根目录,确保空文件夹也会被统计。 - 高效统计:一次性递归获取所有文件,通过
Group-Object按文件夹分组,避免重复遍历文件系统,提升脚本运行效率。 - 多维度输出:同时输出文件夹路径、文件数量、字节总大小和MB单位大小(可根据需求调整为GB等其他单位)。
- 兼容空文件夹:判断文件夹是否有文件,无文件时统计值显示为0,避免报错。
解决你之前的问题
你之前遇到的“只能获取顶层文件夹大小”的问题,是因为没有遍历所有子文件夹并单独统计每个文件夹的文件总和。现在的脚本先拿到所有文件夹的完整列表,再将每个文件夹与对应的文件统计数据关联,实现了递归获取每个路径的大小。
内容的提问来源于stack exchange,提问作者closedcasketfuneral
相关产品推荐
相关产品推荐

