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