过去我重装系统之前会把已经安装的软件列表截个图,装好系统后再对照截图去软件官网下载安装包,逐个安装。最近因为接触到 Linux 和 macOS 上的包管理软件(package manager,例如 apt, dnf, Homebrew),就觉得 Windows 上如果也能用类似的方式来安装软件应该会更方便、优雅,于是开始接触到 WinGet (Windows Package Manager),Windows 11 自带的包管理器,也用命令行的方式来安装软件。
WinGet 基本命令
搜索和安装
用 WinGet 安装某个特定的软件大致分两步,先搜索包 ID,再输入包 ID 安装。
首先我们打开 PowerShell。可以用右键单击 Windows 徽标(左键单击是打开开始菜单的那个图标),选择 Terminal(终端);也可以在开始菜单里找到 PowerShell。
例如我想安装 PotPlayer,就在命令行中输入以下代码,意思是搜索包含 potplayer 的包:
winget search potplayer可能会返回多个搜索结果,这时候需要一点点判断力,通常 WinGet 的 ID 名是 Axx.Bxx 的格式,其中 Axx 是开发方或项目名称,Bxx 是软件的名称。所以搜索结果中的 Daum.PotPlayer 就是我们要找的 PotPlayer 的包 ID。于是我们运行第二步:
winget install Daum.PotPlayer其中 Daum.PotPlayer 既可以自己录入,也可以从搜索结果中复制粘贴。PowerShell 中,复制是选中一段文本后点击右键,粘贴是直接点击右键。
卸载
如果需要卸载软件,可以用 uninstall 命令,例如要卸载刚刚安装的 PotPlayer,就运行:
winget uninstall Daum.PotPlayer如果是之前安装的软件,已经不记得包 ID 了,可以用 list 查看已安装的软件。list 命令看到的软件既有用 WinGet 安装的(Source 列会标注 winget),也有用其他方式安装的,但其他方式安装的软件未必可以用 WinGet 顺利卸载。
winget list升级
用 WinGet 升级软件可以先用 upgrade 命令查看哪些软件可以升级(并不会直接执行升级)。
winget upgrade如果查看后想升级上述列表中的所有软件,可以运行:
winget upgrade --all如果想要升级某个特定的软件,就复制它的包 ID,例如:
winget upgrade Daum.PotPlayer批量安装脚本
我们搜索的包 ID 还可以保存起来,今后重装系统之后,就可以用保存起来的包 ID 逐一运行 install 命令,这样也省去了之前逐一去软件官网下载的麻烦,也不需要安装可能有捆绑软件和广告的各类软件管家。
除了逐一安装之外,还可以把你保存起来的包 ID 清单发给 AI,让 ta 写一个用 WinGet 批量安装这些软件的 PowerShell 脚本,直接粘贴到 PowerShell 中运行,等待安装即可。
现在我用的批量安装代码如下,可以按照这个格式自行增减要安装的软件:
$apps = @(
"SublimeHQ.SublimeText.4",
"Daum.PotPlayer",
"Valve.Steam",
"HandBrake.HandBrake",
"Cryptomator.Cryptomator",
"WinFsp.WinFsp",
"PDFArranger.PDFArranger",
"Anki.Anki",
"FastStone.Viewer",
"ShareX.ShareX",
"voidtools.Everything",
"M2Team.NanaZip",
"chrox.Readest",
"LocalSend.LocalSend",
"Gyan.FFmpeg"
)
foreach ($app in $apps) {
winget install --id $app --exact --source winget --accept-package-agreements --accept-source-agreements
}