Crédito para a solução @Seth
De link
Comando final: powershell -Command "& {Get-ChildItem "\nas\shared\Public\Igor\gscript\version" -Name | sort-object { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }}
Eu tenho uma pasta que contém subpastas para cada versão do aplicativo (número decimal). Agora, tenho um script powershell
para comparação de versões. O problema é que não posso classificá-lo como esperado. Como posso resolvê-lo em um código de linha, porque estou fazendo isso a partir do script em lote.
Usando Get-ChildItem
para ver o conteúdo da pasta
Classificação atual (executando em batch
script:
powershell -Command "& {Get-ChildItem "\folder_dir\" -Name | sort-object -descending }
Opções para solução:
Get-ChildItem
por data e, de alguma forma, imprima apenas os nomes das pastas (sem o título "Nome", como na saída regular) Get-ChildItem
pelo nome e, de alguma forma, classifique-o (o problema é com números decimais) Por exemplo (descendente ou ascendente, não importa. A ordem é o que importa):
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
Crédito para a solução @Seth
De link
Comando final: powershell -Command "& {Get-ChildItem "\nas\shared\Public\Igor\gscript\version" -Name | sort-object { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }}
Seu script está funcionando perfeitamente.
Você classifica em ordem decrescente, e é exatamente isso que faz.
Observe que o número à esquerda do arquivo. também vai de alto para baixo.
Assim, seu script precisaria ser o seguinte:
powershell -Command "& {Get-ChildItem "\nas\shared\Public\Igor\gscript\version"
-Name | sort-object }
Sort-Object classifica em ordem crescente por padrão, a menos que -descending seja usado.
Tags regex powershell sorting