PowerShell 里 && 不能用来连接命令
问题现象
从各种教程里复制命令,一到 Windows 的 PowerShell 就报错:
所在位置 行:1 字符: 17
+ npm run build && npm run serve
+ ~~
标记“&&”不是此版本中的有效语句分隔符。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken同样的命令在 Git Bash、macOS 的 zsh、Linux 的 bash 里都正常,所以很容易以为是命令本身写错了。
排查过程
- 先确认自己用的是哪一个 PowerShell:
$PSVersionTable.PSVersion输出 Major 5 说明是 Windows 自带的 Windows PowerShell 5.1;输出 Major 7 才是 PowerShell 7(命令名是 pwsh)。
- 再确认
&&到底属于哪个版本:
# 5.1 会在这里报错
$true && Write-Host ok根因
&& 和 || 是 PowerShell 7 才引入的「管道链运算符」。Windows 10 / 11 自带的
Windows PowerShell 5.1 不认这两个符号,powershell.exe 和 pwsh.exe 是两个不同的程序。
解决办法
在 5.1 里按需求选一种:
# 1) 只想依次执行,不管前一条是否成功 —— 用分号
npm run build; npm run serve
# 2) 前一条成功才执行下一条 —— 用 $?
npm run build; if ($?) { npm run serve }
# 3) 前一条失败才执行 —— 反过来判断
npm run build; if (-not $?) { Write-Host "构建失败" }想直接用 &&,就装 PowerShell 7:
winget install --id Microsoft.PowerShell --source winget
# 之后用 pwsh 运行,注意不是 powershell
pwsh -Command "npm run build && npm run serve"最后一条命令我加了说明:调用 pwsh 时如果命令里有引号,
建议写成 pwsh -Command '...' 或者放进脚本文件,避免两层引号打架。