使用Powershell对目录名称进行排序

Sum*_*osh 5 powershell

我有目录列表。目录被命名为数字。如何通过电源外壳按数字顺序对目录名称进行排序。

Name
-----
1
12
2
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 5

排序顺序基于用于比较的属性的类型

由于Name目录的属性是type [string],因此会发生字母排序,该排序在10之前9(因为第一个1字符9在字母之前位于该字符之前)。

要按数字值对数字排序,请使用脚本块(如注释中所示)或计算出的表达式将值转换为数字类型:

Get-ChildItem -Directory | Sort-Object -Property {$_.Name -as [int]}
Run Code Online (Sandbox Code Playgroud)

使用-as而不是强制转换将防止Name无法将属性转换为的对象出现异常[int]。该-as类型的操作在PowerShell的3.0版本中引入的,因此对于早期版本中,使用常规演员:

Get-ChildItem -Directory | Sort-Object -Property {[int]$_.Name}
Run Code Online (Sandbox Code Playgroud)