我是电源外壳新手。我正在尝试对名称中间有版本号的文件列表进行排序。
以下是文件列表:
sample-file-1.1.0-patch.zip
sample-file-1.1.1-patch.zip
sample-file-1.1.2-patch.zip
sample-file-1.1.2.1-fix-patch.zip
sample-file-1.1.3-patch.zip
sample-file-1.1.3.1-fix-patch.zip
..
sample-file-1.1.15-patch.zip
sample-file-1.1.15.1-fix-patch.zip
sample-file-1.1.15.2-fix-patch.zip
..
sample-file-2.0.0-patch.zip
sample-file-2.0.1-patch.zip
..
我会请求你帮我解决排序逻辑。
由于
答案 0 :(得分:7)
您的示例输入最简单的方法如下,假设-
后的第一个数字开始版本号,并以后续-
之前的最后一个数字结束:
Get-ChildItem *.zip | Sort-Object { [version]($_.Name -replace '^[^\d]+-(.*\d)-.*', '$1') }
$_.Name -replace '^[^\d]+-(.*\d)-.*', '$1'
从字符串中提取每个文件名的版本号。
[version]
将该字符串强制转换为版本号对象(System.Version
) [1]
,可根据版本号组件进行排序。
将整个表达式作为脚本块{ ... }
传递给Sort-Object
意味着排序基于脚本块返回的[version]
实例,并针对每个输入文件名进行评估。
[1] PSv5.1引入了基于semantic versioning的相关类型[System.Management.Automation.SemanticVersion]
,但这不适用于此,因为它只支持 3 版本号组件。