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

如何从PowerShell启动多个CMD命令提示符并执行带不同变量的命令?脚本仅执行单个CMD的问题求助

解决PowerShell批量启动多CMD窗口执行带不同变量命令的问题

嘿,我来帮你搞定这个困扰!你现在遇到的核心问题是:默认情况下,直接在PowerShell里调用cmd.exe是同步阻塞的——PowerShell会等着当前CMD窗口关闭,才会继续执行循环里的下一次调用,所以只能一个接一个启动,没法批量打开。

咱们只需要换用异步启动的方式,让PowerShell不用等每个CMD窗口关闭,直接一次性启动所有窗口就行,下面给你两种常用的解决方案:

方案1:直接在PowerShell里启动CMD执行命令(无需额外CMD脚本)

如果你的命令逻辑不复杂,可以直接在PowerShell循环里用Start-Process命令异步启动CMD窗口,每个窗口带不同变量:

# 先定义所有需要用到的变量值
$variableList = "参数A", "参数B", "参数C", "测试参数"

foreach ($var in $variableList) {
    # 启动新CMD窗口,执行命令后保持窗口打开(用/k参数)
    Start-Process cmd.exe -ArgumentList "/k", "echo 当前执行的变量是:$var && pause"
    
    # 如果你希望命令执行完自动关闭窗口,把/k改成/c即可:
    # Start-Process cmd.exe -ArgumentList "/c", "echo 当前执行的变量是:$var && pause"
}

方案2:调用外部CMD脚本并传递不同变量

如果你必须用单独的CMD脚本(比如my_script.cmd),同样用Start-Process来异步启动,把变量作为参数传给CMD脚本:

$variableList = "user1", "user2", "user3"

foreach ($var in $variableList) {
    # 启动CMD窗口,调用你的脚本并传参,执行后保持窗口
    Start-Process cmd.exe -ArgumentList "/k", "my_script.cmd $var"
    
    # 自动关闭版本:
    # Start-Process cmd.exe -ArgumentList "/c", "my_script.cmd $var"
}

额外小技巧

  • 如果变量里包含空格或特殊字符,记得用引号包裹参数(PowerShell里用反引号`转义双引号):
    Start-Process cmd.exe -ArgumentList "/k", "my_script.cmd `"$var`""
    
  • 可以给每个窗口设置专属标题,方便区分:
    Start-Process cmd.exe -ArgumentList "/k", "echo 当前变量:$var" -WindowTitle "CMD窗口 - 变量:$var"
    
  • 如果不需要显示窗口(后台执行),可以添加-WindowStyle Hidden参数。

为什么之前的方法不行?因为你之前可能直接用了cmd.exe /k ...这种写法,PowerShell会把它当成同步命令,必须等当前CMD进程结束才会继续循环。而Start-Process是专门用来启动新进程的命令,默认就是异步执行的,所以循环会一次性启动所有需要的CMD窗口。

内容的提问来源于stack exchange,提问作者eya gue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:22:47