Как отсортировать правильные десятичные числа

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
igor
источник
Ближайший ответ был в ссылка на сайт , Но у меня нет букв, только цифры
igor
2
То, что вы ищете, это естественная сортировка. это или же этот может быть полезным Что касается вашего примера, почему вы не сможете его адаптировать? Просто вы бы разбили, используя точку, и отсортировали каждую группу?
Seth
Свернуто, но это соответствует вашему образцу: Get-ChildItem "\folder_dir\" -Name | sort $("{0}.{1}" -f ($_ -replace '^(.*?)\.\d+$', '$1'), ($_ -replace '^.*?\.(\d+)$', '$1').PadLeft(10, "0"))
Lieven Keersmaekers
Пример натальной сортировки @Seth работает.
root
Решение @Seth сработало. Заключительная команда: powershell -Command "& {Get-ChildItem "\\nas\shared\Public\Igor\gscript\version" -Name | sort-object { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }}
igor

Ответы:

1

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

От ссылка на сайт

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

igor
источник
0

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

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

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

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

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

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

LPChip
источник
(1) В ps нет «восходящего» объекта сортировки (2) Мой скрипт не работает должным образом, посмотрите описание
igor
@ Игорь мой плохой. По умолчанию это происходит по возрастанию, если вы не установили -cecending. Отредактировал мой ответ, чтобы отразить.
LPChip