如何使用winget按应用程序名称的字母顺序显示已安装的应用程序?

问题描述 投票:0回答:5

使用winget,

winget list
命令显示我的计算机中当前安装的应用程序列表,但它不会像控制面板那样按应用程序名称的字母顺序显示应用程序,

有没有办法使用

winget
按应用程序名称的字母顺序显示已安装的应用程序?

注意:两张图片来自不同的机器。

谢谢。

windows terminal winget
5个回答
6
投票

我想看看 winget 命令是否有一个参数/选项,并且真的想对 Trenly 的答案发表评论;我一直在使用类似的管道命令(只是更短),所以他仍然应该得到荣誉!

但是,显然,我必须有一定的声誉分数才能评论他(或任何其他)的答案......然而,我可以提供一个没有任何评级的答案;去搞清楚。所以,较短的版本,类似于他的答案,但没有不必要的嵌套管道:

winget 列表|对象排序


1
投票

正如 Demetrius 在他的评论中提到的,目前客户端中没有内置排序功能。但是,在您的屏幕截图中,我看到您正在使用 PowerShell。您可以使用 PowerShell 变量和命令对输出进行有效排序。通过将几个命令链接在一起,可以重新创建表。这似乎对我有用 -

$a=winget list;$a|select -First 3;$a|select -Skip 3|Sort-Object|select -First 9

0
投票

您可以在

这里
查看ConvertFrom-FixedColumnTable函数,将
winget list
的结果转换为表格。

我创建了一个函数

winget_list_OrderBy
以使其简单:

function winget_list_OrderBy {
    <#
    .EXAMPLE
        winget_list_OrderBy
    .EXAMPLE
        winget_list_OrderBy -OrderBy 'Name' -Arguments "--id=Git.Git"
    #>


    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline)]
        [string[]]
        $OrderBy = 'Name', # $OrderBy can be equal to 'Name'/'Id'/'Version'/'Source' (and 'Available' if exist).

        [Parameter(ValueFromPipeline)]
        [string[]]
        $Arguments = ''
    )
    # Backup the original [Console]::OutputEncoding
    $encoding = [Console]::OutputEncoding
    # Make PowerShell interpret winget.exe's output as UTF-8
    [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

    (winget list $Arguments) -match '^(\p{L}|-)' | # filter out progress-display lines
    ConvertFrom-FixedColumnTable |      # parse output into objects
    Sort-Object $OrderBy |              # sort by the ID property (column)
    Format-Table                        # display the objects in tabular format

    # Restore the original [Console]::OutputEncoding afterwards
    [Console]::OutputEncoding = $encoding

}

用法很简单:

winget_list_OrderBy -OrderBy $OrderBy -Arguments $Arguments
winget_list_OrderBy


0
投票

对此有何想法?它可能需要一些清理,但我只是将结果转换为对象数组。

$apps = @("Microsoft Visual Studio Code", "Microsoft Visual Studio Code Insiders", "Visual Studio Community 2022")

$global:foundapps = [System.Collections.Generic.List[object]]::new()
foreach ($app in $apps) {
    $Applist = winget search $app
    $header = $Applist[1]
    $nameposition = $header.indexof('Name')
    $idPosition = $header.indexof('Id')
    $versionPosition = $header.indexof('Version')
    $sourceposition = $header.indexof('Source')
    $name = $header.substring($nameposition, $idPosition).replace(' ', '')
    $id = $header.substring($idPosition, ($versionPosition - $idPosition)).replace(' ', '')
    $iVersiond = $header.substring($versionPosition, ($sourceposition - $versionPosition)).replace(' ', '')
    $source = $header.substring($sourceposition, ($header.length - $sourceposition)).replace(' ', '')
    $appstoadd = $Applist | select-object -skip 3
    foreach ($AppToAdd in $appstoadd) {
        $foundapps.Add([PSCustomObject] @{
                "Name"    = $AppToAdd.substring($nameposition, $idPosition).replace(' ', '')
                "Version" = $AppToAdd.substring($versionPosition, ($sourceposition - $versionPosition)).replace(' ', '')
                "ID"      = $AppToAdd.substring($idPosition, ($versionPosition - $idPosition)).replace(' ', '')
                "Source"  = $AppToAdd.substring($sourceposition, ($header.length - $sourceposition)).replace(' ', '')
            })
    }
}
$foundapps |fl

0
投票

在命令提示符下尝试:

winget list | sort
© www.soinside.com 2019 - 2024. All rights reserved.