1

У меня есть папка, которая содержит подпапки для каждой версии приложения (десятичное число). Теперь у меня есть скрипт powershell для сравнения версий. Проблема в том, что я не могу отсортировать, как ожидалось. Как я могу решить это в одной строке кода, потому что я делаю это из пакетного скрипта.

Использование Get-ChildItem для просмотра содержимого папки

Текущая сортировка (выполняется из batch скрипта:

powershell -Command "& {Get-ChildItem "\folder_dir\" -Name | sort-object -descending }

Варианты решения:

  1. Сортируйте Get-ChildItem по дате и каким-то образом печатайте только имена папок (без заголовка "Имя", как при обычном выводе)
  2. Сортировать Get-ChildItem по имени и как-то его отсортировать (проблема с десятичными числами)

Например (нисходящий или восходящий, не имеет значения. Порядок это то, что имеет значение):

Folder content:
1.0
1.111
1.11
2.2
1.18
2.5
2.44

Current output:
2.5 <-- wrong place
2.44
2.2
1.18 <-- wrong place
1.111
1.11
1.0

Expected sort:
1.0
1.11
1.18
1.111
2.2
2.5
2.44

2 ответа2

1

Кредит @Seth решение

По ссылке

Последняя команда: powershell -Command "& {Get-ChildItem "\\nas\shared\Public\Igor\gscript\version" -Name | sort-object { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }}

0

Ваш скрипт работает отлично.

Вы сортируете в порядке убывания, и это именно то, что он делает.

Обратите внимание, что число слева от. также идет от высокой к низкой.

Таким образом, ваш сценарий должен быть следующим:

powershell -Command "& {Get-ChildItem "\\nas\shared\Public\Igor\gscript\version" 
   -Name | sort-object }

Sort-Object сортирует по возрастанию по умолчанию, если не используется -descending.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .