首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PowerShell:排序-对象降序错误

PowerShell:排序-对象降序错误
EN

Stack Overflow用户
提问于 2021-05-17 12:07:15
回答 2查看 332关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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脚本,我尝试只保留各自应用程序文件夹的最高版本,并删除所有其他文件夹。结果应该是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Packages\Adobe\DC\10.0.8

C:\Packages\Microsoft\Edge\6.1.20

然而,在我的脚本中,排序似乎不能正常工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

谁能告诉我我哪里做错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-17 12:24:44

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sort {[version]::Parse(($_.split("\"))[-1])} -Descending
票数 6
EN

Stack Overflow用户

发布于 2021-05-17 13:22:29

谢谢。下面的代码运行得很好:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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#>}

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67569359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文