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

使用双循环识别同名XML与PDF文件的问题求助

解决XML与PDF文件匹配检测的PowerShell代码问题

问题分析

你的代码逻辑存在两个关键错误:

  • 第一个foreach循环中使用的$PDFfile变量未定义,它是第二个循环的迭代变量,此时还未初始化,导致所有XML文件都会被判定为无匹配PDF。
  • 第二个foreach循环中使用的$XMLfile变量是第一个循环的迭代变量,循环结束后仅保留最后一个XML文件的引用,无法正确与所有PDF文件对比。

正确解决方案

方法一:直接通过基名匹配(适合文件数量较少的场景)

$Folder = "E:\Monitoring\CCRChannels\Delivery\"

$XMLFiles = Get-ChildItem $Folder -Filter "*.xml" 
$PDFFiles = Get-ChildItem $Folder -Filter "*.pdf" 

# 检查每个XML是否对应同名PDF
foreach($xml in $XMLFiles) {
    $baseName = $xml.BaseName
    $matchingPdf = $PDFFiles | Where-Object { $_.BaseName -eq $baseName }
    if ($matchingPdf) {
        Write-Host "$($xml.Name) 存在匹配的PDF文件" -ForegroundColor Green
    }
    else {
        Write-Host "$($xml.Name) 没有匹配的PDF文件" -ForegroundColor Red
    }
}

Write-Host "`n---分割线---`n"

# 检查每个PDF是否对应同名XML
foreach($pdf in $PDFFiles) {
    $baseName = $pdf.BaseName
    $matchingXml = $XMLFiles | Where-Object { $_.BaseName -eq $baseName }
    if ($matchingXml) {
        Write-Host "$($pdf.Name) 存在匹配的XML文件" -ForegroundColor Green
    }
    else {
        Write-Host "$($pdf.Name) 没有匹配的XML文件" -ForegroundColor Red
    }
}

方法二:使用哈希表提升匹配效率(适合文件数量较多的场景)

哈希表的查找速度远快于遍历集合,大量文件时能显著提升效率:

$Folder = "E:\Monitoring\CCRChannels\Delivery\"

$XMLFiles = Get-ChildItem $Folder -Filter "*.xml" 
$PDFFiles = Get-ChildItem $Folder -Filter "*.pdf" 

# 构建PDF文件基名的哈希表
$pdfHash = @{}
foreach($pdf in $PDFFiles) {
    $pdfHash[$pdf.BaseName] = $true
}

# 检测XML匹配情况
foreach($xml in $XMLFiles) {
    if ($pdfHash.ContainsKey($xml.BaseName)) {
        Write-Host "$($xml.Name) 存在匹配的PDF文件" -ForegroundColor Green
    }
    else {
        Write-Host "$($xml.Name) 没有匹配的PDF文件" -ForegroundColor Red
    }
}

Write-Host "`n---分割线---`n"

# 构建XML文件基名的哈希表
$xmlHash = @{}
foreach($xml in $XMLFiles) {
    $xmlHash[$xml.BaseName] = $true
}

# 检测PDF匹配情况
foreach($pdf in $PDFFiles) {
    if ($xmlHash.ContainsKey($pdf.BaseName)) {
        Write-Host "$($pdf.Name) 存在匹配的XML文件" -ForegroundColor Green
    }
    else {
        Write-Host "$($pdf.Name) 没有匹配的XML文件" -ForegroundColor Red
    }
}

内容的提问来源于stack exchange,提问作者Lee Nolan Bolger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:53:13