Powershell,按文件名末尾的版本号对文件列表进行排序?

和索伦森

您如何使用PowerShell对文件名列表进行排序,以便它们以降序显示?

我只需要最高版本的文件名。

Name
----
CYFS_PreK_1_0_1_10
CYFS_PreK_1_0_1_11
CYFS_PreK_1_0_1_12
CYFS_PreK_1_0_1_13
CYFS_PreK_1_0_1_14
CYFS_PreK_1_0_1_15
CYFS_PreK_1_0_1_16
CYFS_PreK_1_0_1_17
CYFS_PreK_1_0_1_18
CYFS_PreK_1_0_1_19
CYFS_PreK_1_0_1_20
CYFS_PreK_1_0_1_21
CYFS_PreK_1_0_1_22
CYFS_PreK_1_0_1_23
CYFS_PreK_1_0_1_8
CYFS_PreK_1_0_1_9

下面将选择“ CYFS_PreK_1_0_1_9”,因为它是按字母顺序排列的最高数字,因为版本号中没有前导零。

$lastVersion = get-childitem $src |
    sort-object -descending | 
    select-object -First 1 -Property:Name

但是,我正在寻找“ CYFS_PreK_1_0_1_23”

更新:

如果只关心最后一组数字,则可以将名称分隔为下划线,然后按数字对末段进行排序。

Get-ChildItem $_ | 
    Sort-Object {[int] $_.Name.Split("_")[5]} -Descending |
    select-object -First 1 -Property:Name

这适用于此集合,但是,如果我们修订到版本1_0_2_x,则它将再次中断,因为1_0_2_1中的最后1小于1_0_1_23中的23。

罗恩·爱德华兹

您可以使用[Version]类型进行版本排序。这仅考虑了版本(因此它并不关心文件名的开头):

dir $_ |
    Sort-Object { 
        [Version] $(if ($_.BaseName -match "(\d+_){3}\d+") { 
                        $matches[0] -replace "_", "."
                    } 
                    else { 
                        "0.0.0.0"
                    })  
    } | select -last 1 -ExpandProperty Name

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Powershell中按版本号对文件进行排序

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

如何按文件名对文件路径列表进行排序?

使用正则表达式提取文件名末尾的版本号

按数字值对文件名进行排序

使用Maven从文件名中删除版本号

按位数对文件版本进行排序

Powershell:按版本号选择文件夹

命令行按文件名或目录名对文件或目录进行排序

Bash 按包含年份和缩写月份的文件名对文件进行排序

如何按文件名中的日期对文件排序?

仅给定文件名,如何按时间对文件列表进行排序

需要帮助根据文件名中的日期戳对文件列表进行排序

根据python中的文件名对文件进行排序

Bash:根据文件名对文件进行排序

如何使用python按特定顺序对文件名进行排序

按分隔符对文件名进行主要和次要数字排序

如何按数字顺序和修改的时间顺序对文件名进行排序?

按数字字段(子字符串)对文件名进行排序

如何按数字而不是字母顺序对文件名集合进行排序?

如何按名称的某些子字符串对文件名列表进行排序?

使用Python对文件名进行版本控制

如何在ruby中对文件名进行排序?

C ++在目录中对文件名进行排序

按文件名排序列表

按数字顺序对文件进行排序,同时排除具有非数字文件名的文件

如何避免在.so文件名中包含版本号

按ModifyTime对文件列表进行排序(Google Drive API)

根据文件名与文件夹Python匹配对文件进行排序