Powershell: сортировка последних файлов - PullRequest
0 голосов
/ 08 июля 2019

У меня есть папка с сотнями файлов 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...