PowerShell:排序对象降序错误

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

C:PackagesAdobeDC9.2.2
C:PackagesAdobeDC10.0.3
C:PackagesAdobeDC10.0.8

C:PackagesMicrosoftEdge6.1.10
C:PackagesMicrosoftEdge6.1.18
C:PackagesMicrosoftEdge6.1.20

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

C:PackagesAdobeDC10.0.8

C:PackagesMicrosoftEdge6.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:PackagesAdobeDC”,9.2.2 被认为是最高版本(根据脚本),但它应该是 10.0.8。

Deleting C:PackagesAdobeDC10.0.8
Deleting C:PackagesAdobeDC10.0.3
Deleting C:PackagesMicrosoftEdge6.1.18
Deleting C:PackagesMicrosoftEdge6.1.10

有人能告诉我我做错了什么吗?

回答

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

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

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

  • Nice, though since the input objects are `System.IO.DirectoryInfo` instances, you can simplify to `Sort-Object { [version] $_.Name } -Descending`

以上是PowerShell:排序对象降序错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>