在 vscode 终端中添加新 cmd 或 powershell 实例需编辑 terminal.integrated.profiles.windows 配置项,以 json 对象形式定义各终端名称、path(数组格式)、args(命令参数数组)及图标;必须显式声明所有保留终端,否则默认项会消失,且路径错误、args 格式不当或未设默认 profile 均会导致新建终端无法启动。

怎么在 VSCode 终端里加一个新 CMD 或 PowerShell 实例
VSCode 的终端默认只开一个 PowerShell(Windows)或 bash(macOS/Linux),但你可以手动添加多个独立配置,比如额外的 cmd.exe、带参数的 powershell.exe、甚至 pwsh.exe(PowerShell Core)。关键不是改设置界面,而是编辑 settings.json 里的 terminal.integrated.profiles.windows(或对应平台的 key)。
修改 terminal.integrated.profiles.windows 配置项
这个配置项控制 Windows 下所有可用终端类型。它是个对象,key 是你看到的终端下拉菜单里的名字,value 是启动命令和参数。不写的话 VSCode 会用内置默认值;写了就覆盖——所以必须显式声明所有想保留的终端,否则原生 PowerShell / CMD 可能消失。
- 打开设置 → 搜索
terminal.integrated.profiles.windows→ 点击「在 settings.json 中编辑」 - 确保整个对象存在且格式正确,例如:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": ["cmd.exe"],
"icon": "terminal-cmd"
},
"Admin CMD": {
"path": ["cmd.exe"],
"args": ["/k", "title Admin CMD & echo Running as admin (check UAC)"]
},
"pwsh": {
"path": ["C:\Program Files\PowerShell\7\pwsh.exe"],
"args": ["-NoExit", "-Command", "Write-Host 'pwsh 7 loaded' -ForegroundColor Green"]
}
}
-
path必须是数组,哪怕只有一个可执行文件 -
args是字符串数组,不是单个字符串;空格分隔的命令行要拆成多个元素(如["/k", "echo hello"]) - 如果路径含空格或特殊字符,不用手动加引号——VSCode 会自动处理
为什么新加的终端点不开?常见错误现象
点了新终端名却没反应,或者弹出错误提示,大概率是这几个原因:
- 拼错了
path路径,比如把pwsh.exe写成powershell.exe,或路径不存在(尤其pwsh默认不装在系统目录) -
terminal.integrated.defaultProfile.windows还指向已删除的 profile 名,导致新建终端时 fallback 失败 - 用了
shellArgs(旧版键名),现在必须用args - PowerShell 启动时报错
The term '...' is not recognized:说明args里写的命令在非交互模式下不可用,得加-Command或-c显式指定
PowerShell 和 CMD 的行为差异影响实际使用
别以为只是换个名字——CMD 和 PowerShell 启动后加载的环境、权限模型、脚本支持完全不同:
- CMD 启动快,适合跑批处理、老工具链;但不支持现代 JSON 解析、管道对象流
- PowerShell(
powershell.exe)自带 .NET、模块自动发现,但首次启动略慢;pwsh.exe更轻量,跨平台,但部分 Windows 专属模块(如ActiveDirectory)不支持 - 如果需要管理员权限,CMD 可用
/k+start /wait powershell -Command "Start-Process cmd -Verb RunAs",但更稳的方式是单独建一个「以管理员身份运行」的 profile,并配合快捷方式提权 - 所有 profile 的工作目录默认继承 VSCode 打开的文件夹,但
args里不能用%CD%这类 CMD 变量——它在 VSCode 启动时就被解析了,不是运行时
真正麻烦的是 profile 之间状态不共享:你在「Admin CMD」里 set FOO=bar,切到另一个终端就没了。别指望靠终端配置实现全局环境变量注入,那得走系统级设置或 terminal.integrated.env.windows。











