代码之家  ›  专栏  ›  技术社区  ›  ATKiwi

按前导数字对文件版本进行排序

  •  2
  • ATKiwi  · 技术社区  · 7 年前

    我创建了一个脚本来创建一个报告,列出所有不是最新的文件。我想从2018年开始订购这些文件。第一。除此之外,我没有偏好。

    dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} | Sort-Object FileVersion -Descending > V:\file.path\binFileVersion.txt
    

    我的电流输出:

    4.0.30319.01
    3.10.0.0
    2018.0.0.0
    2018.0.0.0
    2018.0.0.0
    2018.0.0.0
    2.5.3.5
    15, 0, 3, 0
    1.0.0.0
    

    期望输出:

    2018.0.0.0
    2018.0.0.0
    2018.0.0.0
    2018.0.0.0
    Everything else
    Everything else
    

    我一直在胡思乱想,但还没有找到真正的解决办法。我看到了关于pad的另一个帖子,但那并没有真正做到预期的效果。

    谢谢!

    有人发布了一个有效的答案,但在我批准之前被删除了。

    $Match,$NotMatch = (dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} | Sort-Object FileVersion -Descending).Where({$_.FileVersion -like '2018*'},'Split') 
    @($Match,$NotMatch)
    

    谢谢你!

    2 回复  |  直到 7 年前
        1
  •  2
  •   BenH    7 年前

    你可以使用 .Where() 方法,将其拆分为两个集合,以确定其是否匹配 2018* . 然后首先返回匹配的集合。

    $Match,$NotMatch = (dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} | Sort-Object FileVersion -Descending).Where({$_.FileVersion -like '2018*'},'Split')
    @($Match,$NotMatch)
    

    注意:需要PowerShell 4+

        2
  •  0
  •   Avshalom    7 年前

    您可以使用regex,尝试以下操作:

    dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} | 
    Sort-Object {[regex]::Match($_,'2018')} -Descending
    
    推荐文章