根据文件名中间的版本号对文件进行排序



我是电源外壳的新手。我正在尝试对名称中间具有版本号的文件列表进行排序。

这是文件列表:

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
..

我会请你帮我解决排序逻辑。

谢谢

示例输入的最简单方法是,它假定-后面的第一个数字以版本号开头,并以后续-之前的最后一位数字结尾:

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引入了一种基于语义版本控制的相关类型[System.Management.Automation.SemanticVersion],但是,它在这里不起作用,因为它只支持3个版本号组件。

最新更新