【问题标题】:PowerShell: Sort-Object descending wrong orderPowerShell:排序对象降序错误
【发布时间】:2021-08-06 16:42:19
【问题描述】:

我们目前有以下文件夹结构:

C:\Packages\Adobe\DC\9.2.2
C:\Packages\Adobe\DC\10.0.3
C:\Packages\Adobe\DC\10.0.8

C:\Packages\Microsoft\Edge\6.1.10
C:\Packages\Microsoft\Edge\6.1.18
C:\Packages\Microsoft\Edge\6.1.20

使用 PowerShell 脚本,我尝试仅保留相应应用程序文件夹的最高版本并删除所有其他文件夹。结果应该是:

C:\Packages\Adobe\DC\10.0.8

C:\Packages\Microsoft\Edge\6.1.20

但是,排序在我的脚本中似乎无法正常工作。

$folders_root = Get-ChildItem -Path C:\Packages -Directory

foreach ($folder in $folders_root)
{
    $folders_appilcation = Get-ChildItem $folder.FullName -Directory

    foreach ($app_folder in $folders_appilcation)
    {
        $versionfolder = Get-ChildItem $app_folder.FullName -Directory | Sort-Object -Descending | Select-Object -Skip 1 | % {Write-host "Deleting $($_.FullName)"<#;  Remove-Item $_.FullName#>}

    }
}

对于路径“C:\Packages\Adobe\DC”,9.2.2被认为是最高版本(根据脚本),但它应该是10.0.8。

Deleting C:\Packages\Adobe\DC\10.0.8
Deleting C:\Packages\Adobe\DC\10.0.3
Deleting C:\Packages\Microsoft\Edge\6.1.18
Deleting C:\Packages\Microsoft\Edge\6.1.10

谁能告诉我我做错了什么?

【问题讨论】:

  • 排序确实有效,它所看到的只是具有更高数字的目录名称,而不是它们代表什么,或者它们的版本是什么。

标签: windows powershell batch-processing sort-object


【解决方案1】:

谢谢。以下代码完美运行:

$folders_root = Get-ChildItem -Path \\hkt-cmgmt01a\d$\Empirum\Configurator\Packages -Directory

foreach ($folder in $folders_root)
{
    $folders_appilcation = Get-ChildItem $folder.FullName -Directory

    foreach ($app_folder in $folders_appilcation)
    {
        $versionfolder = Get-ChildItem $app_folder.FullName -Directory | Sort-Object { [version] $_.Name } -Descending -ErrorAction SilentlyContinue| Select-Object -Skip 1 | % {Write-host "Deleting $($_.FullName)"<#;  Remove-Item $_.FullName#>}

    }
}

【讨论】:

    【解决方案2】:

    排序是比较字符串而不是数字。当您比较字符串 10 和 9 时,它会将 10 解释为 1。

    强制排序给我们作为版本,试试这样的:

    sort {[version]::Parse(($_.split("\"))[-1])} -Descending
    

    【讨论】:

    • 很好,虽然由于输入对象是System.IO.DirectoryInfo 实例,您可以简化为Sort-Object { [version] $_.Name } -Descending
    猜你喜欢
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多