пользовательская сортировка в PowerShell

У меня есть имена файлов в следующем формате:

[ignore-prefix]-[important-middle]-[ignore-suffix]-[name-with-digits]

Мне нужно отсортировать по следующим правилам: сначала по средней части, затем по имени в естественном порядке (т.е. foobar10> foobar2). Я не знаю значения префикса, но я знаю разделитель (тире).

поэтому моя первая попытка, естественно:

 filelist | Sort-Object -property @{Expression=`
       {$_.FullName.SubString($_.FullName.IndexOf("-")+1)}}

Проблема в том, что суффикс влияет на порядок (ignore-aaa-1ignore-wname) сортируется перед ignore-aaa-2ignore-aname), поэтому:

 $filelist | Sort-Object -property @{Expression=`
       {$_.FullName.SubString($_.FullName.IndexOf("-")+1,`
        $_.FullName.SubString($_.FullName.IndexOf("-")+1).IndexOf("-"))}}

Хорошо, это сортируется по середине, но уже неаккуратно. Если бы я добавил естественную сортировку, было бы еще хуже. Какой более элегантный способ сделать это?

13
задан ΩmegaMan 22 July 2019 в 20:31
поделиться