我有一个文件夹,其中包含 XML 和 PDF 文件。我需要每个 XML 都有一个具有匹配名称的 PDF,反之亦然。我正在尝试创建两个循环,一个仅捕获文件夹中的 PDF,另一个仅获取 XML,然后比较它们以确定哪些匹配,哪些不匹配。
我尝试创建两个单独的 For Each 循环,其中包含 If 语句。我希望这会循环显示 XML 和 PDF 的名称,但我认为事实并非如此。请参阅下面的代码,任何帮助将不胜感激。
$Folder = "E:\Monitoring\CCRChannels\Delivery"
$XMLFiles = Get-ChildItem $Folder -过滤器“*.xml”
$PDFFiles = Get-ChildItem $Folder -过滤器“*.pdf”
foreach($XMLFiles 中的 $XMLfile){
$XMLname = $XMLfile.name
if($XMLfile.name -eq $PDFfile.name) {
写入主机“$XMLname 有一个匹配的 PDF”-ForegroundColor 绿色
} 否则{
写入主机“$XMLname 没有匹配的 PDF”-ForegroundColor Red
}
}
foreach($PDFfiles 中的 $PDFfile) {
$PDF名称 = $PDF文件.名称
if($PDFfile.name -eq $XMLfile.name) {
写入主机“$PDFname 有匹配的 XML”-ForegroundColor 绿色
} 否则{
写入主机“$PDFname 没有匹配的 XML”-ForegroundColor Red
}
}
如果我没说错的话,你不需要多个循环。这应该足够了:
$Folder = "E:\Monitoring\CCRChannels\Delivery"
$AllFileList = Get-ChildItem $Folder
$XMLFiles = $AllFileList | Where-Object -Property Extension -EQ '.xml'
$PDFFiles = $AllFileList | Where-Object -Property Extension -EQ '.PDF'
Compare-Object -ReferenceObject $XMLFiles -DifferenceObject $PDFFiles -Property BaseName -IncludeEqual