有没有办法只列出专门使用 winget 命令安装的软件包?
winget list
似乎显示了机器上安装的所有软件包。
我正在更换我的计算机,我想获取我使用 winget 安装的所有软件包的列表,以将其安装在新计算机上。这可能吗?
不可以,WinGet 无法显示已安装的软件包。
列表的输出与“Windows 应用程序和功能”来自同一来源。按来源过滤只是一项请求,用于显示指定来源的多个来源中可用的软件包。
已要求进行增强,以仅过滤给定源中可用的包的结果。
要通过 winget
将显示输出缩小到那些
可用的包,请使用以下命令:
(winget list) -match ' winget$'
不幸的是,这与您实际通过winget
安装的
不一样,向Demitrius Nelon致敬:
v1.4.10173
的
winget
版本开始,没有没有方法可以获取此信息。
提出了未来的增强功能 winget list
顺便说一句,我从未使用 WinGet 在这台电脑上安装过任何东西,所以很高兴 WinGet 现在显示
与 WinGet兼容的应用程序,即使它们没有随 WinGet 一起安装。
列出来源 = Winget 的应用程序:
winget list --source "winget"
小提示,您可以通过将输出管道传输到文件来导出此列表,例如:
winget list --source "winget" > "C:\temp\__MyOutput.txt"
winget export -o "C:\temp\__ListApps.txt"
winget import -i "C:\temp\__ListApps.txt"
但是,此命令显示 winget 可以更新的应用程序列表,无论最初是通过 winget 还是其他方式安装的。
winget update
也许这是一个有用的部分答案?
在 PowerShell 中运行:
$winget_packages = ((winget list) -match ' winget$' | Select-String -Pattern "(?<= {2,})(?!\d+\.\d+)\S+(?= {2,})") | foreach {$_.Matches.Value}
$winget_script = (echo '@echo off
winget install ' ($winget_packages -replace "$", " ")
)
$winget_script | Set-Content install_winget_packages.bat -NoNewLine
本质上,它的作用是获取带有“winget”源的已安装程序列表^1。然后,它将文本前后加上两个或多个非版本号 (X.X+) 的空格,并将匹配的值放入
winget_packages
^2。
最后,它将winget install
放在前面,在末尾添加一个空格,并将其全部写入 .bat 文件,并折叠换行符。
1:正如 @DemitriusNelon指出的那样,这不是您实际使用 winget 安装的那些,但我认为这不是什么大问题,因为如果源可用,我通常宁愿它们是这样。在我不希望这样的情况下。我手动把那对夫妇拿出来。 2:如果