我有一个包含数百个XML文件的文件夹。它们在文本内容中具有ID版本字符串。我需要整理每个ID的最新文件(按创建日期)。 我编写了Powershell脚本,该脚本得到1 arg(folderName)。 还有带有最新ID版本字符串列表的文件(与文件夹名称相同)
$folder = $Args[0]
$lines = Get-Content -Path .\$($folder).txt
Set-Location -Path .\$folder
New-Item -ItemType directory -Force -Path .\latest
$lines | ForEach-Object {
Get-ChildItem -Path .\*.xml | Select-String -Pattern $_ -SimpleMatch -CaseSensitive | Sort-Object CreationTime -Descending | Select-Object -First 1 | Move-Item -Destination .\latest
}
问题在于脚本不会移动最新版本。它随机选择一个。可能是因为ID版本字符串在XML中出现了很多次。
此脚本的运行速度也非常慢(与.bat相比,它执行类似的任务)。 也许有些东西可以加快速度?
UPD:我还需要从txt文件中删除重复的行。该怎么做?
UPD2: 问题可能是因为无法将排序对象应用于搜索结果。
Get-ChildItem -Path .\*.xml | Select-String -Pattern $_ -SimpleMatch -CaseSensitive | Sort-Object LastWriteTime -Descending
结果
IgnoreCase : False
LineNumber : 214
Line : <RegNumber>50:08:0050434:983-50/008/2017-2</RegNumber>
Filename : 351.xml
Path : C:\ren\351.xml
Pattern : 50:08:0050434:983-50/008/2017-2
Context :
Matches : {}
IgnoreCase : False
LineNumber : 216
Line : <Name> № 50:08:0050434:983-50/008/2017-2 от 06.07.2017</Name>
Filename : 351.xml
Path : C:\ren\351.xml
Pattern : 50:08:0050434:983-50/008/2017-2
Context :
Matches : {}
IgnoreCase : False
LineNumber : 218
Line : <Name> № 50:08:0050434:983-50/008/2017-2 от 06.07.2017</Name>
Filename : 298.xml
Path : C:\ren\298.xml
Pattern : 50:08:0050434:983-50/008/2017-2
Context :
Matches : {}
IgnoreCase : False
LineNumber : 88
Line : <RegNumber>50:08:0050434:983-50/008/2017-2</RegNumber>
Filename : 298.xml
Path : C:\ren\298.xml
Pattern : 50:08:0050434:983-50/008/2017-2
Context :
Matches : {}
IgnoreCase : False
LineNumber : 216
Line : <RegNumber>50:08:0050434:983-50/008/2017-2</RegNumber>
Filename : 298.xml
Path : C:\ren\298.xml
Pattern : 50:08:0050434:983-50/008/2017-2
Context :
Matches : {}
但是298.xml较新(应该早于351.xml)