递归遍历目录查找根目录含最多指定格式文件的文件夹
解决方案
以下是满足需求的简洁PowerShell代码,核心是仅统计每个文件夹自身直接包含的指定格式文件,而非递归统计整个子树的文件:
# 替换为你的根目录路径 $rootPath = "C:\Your\Root\Directory" # 目标文件扩展名(统一小写适配Windows大小写不敏感特性) $targetExtensions = @('.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx') # 遍历所有层级文件夹,统计每个文件夹的目标文件数量 $folderCounts = Get-ChildItem -Path $rootPath -Directory -Recurse | ForEach-Object { $directTargetFiles = Get-ChildItem -Path $_.FullName -File | Where-Object { $targetExtensions -contains $_.Extension.ToLower() } [PSCustomObject]@{ Folder = $_.FullName Count = $directTargetFiles.Count } } # 筛选出文件数量最多的文件夹(并列最多时返回全部) $topFolder = $folderCounts | Sort-Object Count -Descending | Select-Object -First 1 # 输出结果 if ($topFolder.Count -gt 0) { "目标文件夹:$($topFolder.Folder)" "目标文件数量:$($topFolder.Count)" } else { "未找到包含指定格式文件的文件夹" }
关键说明
- 避免递归统计文件:统计文件时未使用
-Recurse参数,仅计算当前文件夹的直接子文件 - 大小写兼容:将文件扩展名转为小写后匹配,避免因Windows文件系统大小写不敏感导致的漏统计
- 灵活扩展:可直接修改
$targetExtensions数组添加或移除需要统计的格式 - 并列处理:如果有多个文件夹文件数量相同且最多,可替换筛选逻辑为
$folderCounts | Where-Object { $_.Count -eq ($folderCounts | Measure-Object Count -Maximum).Maximum }来返回所有并列项
内容的提问来源于stack exchange,提问作者Synertry
相关产品推荐
相关产品推荐

