使用两个 For 循环识别具有匹配名称的文件

问题描述 投票:0回答:1

我有一个文件夹,其中包含 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

}

}

powershell loops file for-loop nested-loops
1个回答
0
投票

如果我没说错的话,你不需要多个循环。这应该足够了:

$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
© www.soinside.com 2019 - 2024. All rights reserved.