У меня есть папка с сотнями файлов 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-Version много раз встречается в XML.
Также этот сценарий работает очень медленно (по сравнению с .bat, который выполняет аналогичную задачу).Может быть, есть что-то, что может ускорить это?
UPD: мне также нужно удалить дубликаты строк из текстового файла.Как это сделать?
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)