PowerShell中如何使用EnumerateFiles方法搜索多个目录
多目录批量搜索实现方案
[System.IO.Directory]::EnumerateFiles 没有原生支持传入多目录的方法重载,单次调用仅能处理单个搜索路径,要实现多目录批量搜索,直接遍历目标路径列表逐个调用该方法即可,不会丢失原方法的性能优势。
基础实现代码
# 配置搜索参数:多目录数组、文件匹配规则、搜索深度 $searchPathList = @("C:\Program Files", "D:\WorkDocs", "E:\Backup") $searchFilePattern = "*.config" $searchDepth = [System.IO.SearchOption]::AllDirectories # 遍历路径执行搜索,自动跳过不存在的目录 $matchedFiles = foreach ($singlePath in $searchPathList) { if ([System.IO.Directory]::Exists($singlePath)) { [System.IO.Directory]::EnumerateFiles($singlePath, $searchFilePattern, $searchDepth) } }
实现说明
- 该写法完全保留
EnumerateFiles的延迟枚举特性:不会在方法调用时一次性把所有匹配文件加载到内存,仅在遍历$matchedFiles结果集时逐次返回文件路径,搜索海量文件场景下内存占用远低于Get-ChildItem和Directory.GetFiles方法。 - 提前做目录存在性校验可以避免无效路径触发异常,中断整个搜索流程。
- 如果需要处理系统目录无访问权限的场景,可以增加异常捕获逻辑跳过权限不足的路径:
$matchedFiles = foreach ($singlePath in $searchPathList) { try { if ([System.IO.Directory]::Exists($singlePath)) { [System.IO.Directory]::EnumerateFiles($singlePath, $searchFilePattern, $searchDepth) } } catch [System.UnauthorizedAccessException] { Write-Warning "跳过无访问权限路径:$singlePath" } }
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

