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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:24:21