You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell循环执行多版本Python可执行文件报错求助

问题:PowerShell遍历执行不同版本Python命令报错的解决方法

你编写了一段PowerShell脚本,想要遍历不同版本的Python执行命令,但运行时报错。原脚本如下:

$py39 = python # can be full path to an .exe if needed
$py310 = python3.10
$py311 = python3.11
$pythons = $py39,$py310,$py311

Foreach ($py in $pythons)
{

$py --version

$py -c "print('hello world')"

}

手动执行python、python3.10、python3.11都正常,但脚本运行时出现错误:

+ $py --version
+       ~~~~~~~
Unexpected token 'version' in expression or statement.

+ $py -c "print('hello world')"
+     ~~
Unexpected token '-c' in expression or statement.

解决方法

在PowerShell中,直接用变量后跟参数的写法会被解析为表达式而非命令调用,需要调整执行方式,以下是两种常用方案:

方法1:使用调用操作符&

调用操作符&可以明确告诉PowerShell:将变量值作为命令执行,后面的内容是该命令的参数,这是最简洁的解决方式:

$py39 = "python" # 建议将命令名用引号包裹,避免潜在解析问题
$py310 = "python3.10"
$py311 = "python3.11"
$pythons = $py39,$py310,$py311

Foreach ($py in $pythons)
{
    & $py --version
    & $py -c "print('hello world')"
}

方法2:使用Start-Process(适合复杂场景)

如果需要控制窗口显示、捕获输出等更复杂的执行逻辑,可以使用Start-Process:

$py39 = "python"
$py310 = "python3.10"
$py311 = "python3.11"
$pythons = $py39,$py310,$py311

Foreach ($py in $pythons)
{
    Start-Process -FilePath $py -ArgumentList "--version" -NoNewWindow -Wait
    Start-Process -FilePath $py -ArgumentList "-c", "print('hello world')" -NoNewWindow -Wait
}

参数说明:

  • -NoNewWindow:在当前窗口执行命令,不弹出新窗口
  • -Wait:等待命令执行完成后再继续下一个循环

报错原因

PowerShell的语法解析规则中,$py --version会被视为尝试对变量$py进行表达式操作,而非执行$py对应的命令并传递参数。使用调用操作符&或Start-Process可以明确命令执行的逻辑,避免解析错误。

内容的提问来源于stack exchange,提问作者Vitamin C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:05:05