必须用code --install-extension配合脚本批量安装,路径须绝对路径并加英文双引号,每个插件单独写参数;需提前在有网环境触发懒加载、拷贝完整扩展目录(含node_modules和server),再通过命令面板、输出面板及真实文件操作验证功能。

如何用命令行批量安装 VSCode 插件(无需联网)
VSCode 的 code --install-extension 命令本身只支持安装本地 .vsix 文件,但不支持通配符或目录批量。直接写循环调用是可行的,但要注意路径空格、文件后缀校验和安装失败静默问题。
- 确保所有插件都是合法
.vsix文件(可用unzip -t xxx.vsix快速验证) - Windows 下用 PowerShell 更稳(CMD 对空格路径处理差),macOS/Linux 优先用 Bash 并加引号包裹
"$file" - 添加
--force参数可覆盖已存在版本,否则同名插件会跳过安装 - 每条命令后检查
$?(Linux/macOS)或$LASTEXITCODE(PowerShell),避免某一个失败导致后续全跳过
PowerShell 脚本示例(Windows 离线批量安装)
以下脚本适用于 Windows 用户,放在插件目录下双击运行即可:
Get-ChildItem ".\*.vsix" | ForEach-Object {
Write-Host "Installing $($_.Name)..." -NoNewline
code --install-extension "$($_.FullName)" --force
if ($LASTEXITCODE -eq 0) {
Write-Host " ✓" -ForegroundColor Green
} else {
Write-Host " ✗ (exit code $LASTEXITCODE)" -ForegroundColor Red
}
}
注意:code 命令必须已加入系统 PATH;若未配置,改用完整路径如 "C:\Users\XXX\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"。
为什么不能直接用 code --list-extensions --show-versions 导出再离线装
这个命令输出的是已安装插件的 ID 和版本号(如 ms-python.python@2024.2.0),但离线时无法自动下载对应 .vsix。VSCode 官方不提供按 ID 直接导出离线包的接口,第三方工具(如 vsce)需要网络访问 Marketplace API 才能打包——这违背了“纯离线”前提。
- 真正离线场景下,必须提前人工收集好
.vsix文件,命名建议含版本号便于追溯 - 插件间可能存在依赖(如
ms-dotnettools.csharp依赖ms-vscode.vscode-typescript-next),但--install-extension不解析依赖,需手动保证顺序或重复运行脚本 - 某些插件(如主题类)安装后需重启窗口才生效,脚本无法触发,得靠人确认
Linux/macOS 下用 Bash 批量安装的避坑点
Bash 循环比 PowerShell 更容易因路径含空格或特殊字符崩溃,关键要加引号和启用 nullglob:
shopt -s nullglob
for file in ./*.vsix; do
[ -f "$file" ] || continue
echo -n "Installing $(basename "$file")..."
code --install-extension "$file" --force >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✓"
else
echo " ✗"
fi
done
shopt -s nullglob 防止无匹配文件时把字面量 *.vsix 当作文件名传给 code;[ -f "$file" ] 过滤掉可能的非文件项;重定向 /dev/null 2>&1 是为了不让插件自身日志刷屏干扰判断。
最麻烦的其实是插件签名验证:从非官方渠道下载的 .vsix 可能在新版 VSCode 中被拦截,此时需手动在设置里关闭 extensions.experimental.affinity 或临时允许未签名插件——这个开关藏得深,容易卡住整个流程。











