我有一个查询,它返回路径中的文件夹列表:
Get-ChildItem "." -Directory -Filter "*"| Select -Property Name | Sort-Object Name -Descending
在结果中我获得了一个对象列表:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 30/06/2016 09:51 1.3.35.6503
d---- 14/12/2015 11:04 1.3.29.5885
d---- 16/11/2015 09:54 1.3.28.5790
d---- 27/06/2016 19:33 1.18.3.6497
d---- 21/06/2016 19:33 1.18.2.6492
d---- 21/06/2016 11:55 1.18.1.6490
d---- 10/05/2016 19:34 1.17.99.6427
这是我没想到的顺序!查看Windows资源管理器,如果我按降序对列进行排序,它会按正确顺序排列。
它似乎是按照文本分别对它们进行排序,而Windows资源管理器则更聪明,并通过字符串进行。
PowerShell中是否有一种简单的方法可以将此顺序转换为正确的顺序(例如Windows资源管理器)?我正在考虑一个函数来返回列表并添加一个带有FullName和Name的新对象,方法是将原始名称拆分为4个元素并按单独排序。
答案 0 :(得分:3)
您希望按Version
对文件进行排序。您不需要拆分字符串,只需将BaseName
转换为version
并对其进行排序:
Get-ChildItem '.' -Directory -Filter "*" | sort { [version]$_.BaseName }
<强>结果:强>
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 30.06.2016 13:15 0 1.3.28.5790.txt
-a---- 30.06.2016 13:15 0 1.3.29.5885.txt
-a---- 30.06.2016 13:15 0 1.3.35.6503.txt
-a---- 30.06.2016 13:15 0 1.17.99.6427.txt
-a---- 30.06.2016 13:15 0 1.18.1.6490.txt
-a---- 30.06.2016 13:15 0 1.18.2.6492.txt
-a---- 30.06.2016 13:15 0 1.18.3.6497.txt