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

如何用PowerShell根据部分文件名查找对应PDF文件?

解决PowerShell查找对应PDF文件的问题

原脚本的核心问题是通过路径替换生成带通配符的字符串,既无法直接获取实际文件路径,还容易因构造逻辑导致匹配错误。下面是修正后的方案,直接定位目录搜索并筛选匹配的PDF文件:

修正后的脚本

$fileExtensions = @("*.ipt", "*.iam", "*.ipn", "*.idw")

Get-ChildItem -Path $PathEngDesign -File -Include $fileExtensions -Recurse -ErrorAction SilentlyContinue -Force | ForEach-Object {
    $sourceFile = $_
    Write-Host "源文件路径: $($sourceFile.FullName)"

    # 获取源文件所在目录
    $targetDir = $sourceFile.Directory.FullName
    # 获取源文件的基础名称(不含扩展名)
    $baseName = $sourceFile.BaseName

    # 在当前目录下查找所有PDF文件,筛选文件名包含源文件基础名的项
    $matchingPdfs = Get-ChildItem -Path $targetDir -Filter "*.pdf" -File | Where-Object {
        $_.Name -match [regex]::Escape($baseName)
    }

    if ($matchingPdfs) {
        Write-Host "找到对应的PDF文件:"
        $matchingPdfs | ForEach-Object {
            Write-Host "  $($_.FullName)"
        }
    } else {
        Write-Host "未找到对应PDF文件"
    }
}

关键改动说明

  • 直接定位搜索目录:不再构造带通配符的路径,而是直接在源文件的同目录下搜索PDF,避免路径拼接错误
  • 安全的正则匹配:用[regex]::Escape($baseName)转义基础名中的特殊字符(如点号、连字符),确保匹配逻辑准确,不会把文件名里的特殊符号当成正则语法解析
  • 获取真实文件路径:通过Get-ChildItem直接拿到匹配的文件对象,能输出实际存在的完整路径,而不是仅判断存在性

可选优化

如果需要更严格的匹配规则(比如要求源文件基础名是PDF文件名的独立部分,而非子字符串),可以把匹配逻辑调整为:

# 匹配基础名前后是边界(非字母数字)或字符串首尾,避免类似TAX457匹配TAX4578.pdf的情况
$_.Name -match "(^|\W)$([regex]::Escape($baseName))(\W|$)"

内容的提问来源于stack exchange,提问作者ITBrute

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:50:38