【问题标题】:How to run multiple commands via START command如何通过 START 命令运行多个命令
【发布时间】:2016-01-09 19:58:14
【问题描述】:

我有一个案例,我需要生成多个CMD 实例(使用START 程序),并且每个实例都需要按顺序运行一些命令。这些命令是由批处理脚本生成的,因此无法提前知道。

基本上,我想做的是类似以下的事情,但我不知道正确的语法(或者是否可能):

START (program_a && program_b && program_c)

显然,这些括号的语法不正确。因此,当我尝试运行一些语法正确的变体时:

START program_a && program_b && program_c

我最终只生成了一个CMD 实例,运行program_a,并且“拥有”批处理脚本继续自行执行program_bprogram_c(即不是 在由START 产生的CMD 实例中)。

【问题讨论】:

  • 将几个开始命令放在各自的行上。为什么它们必须在同一个 cmd 进程中执行?为什么不动态创建第二批调用这些程序?
  • 因为任务不能并行化。它们必须按顺序运行。
  • @Marged 建议您动态创建一个子批处理文件,其中包含单独物理行上的三个关键行,然后 start 子批处理。 将依次运行三个命令。如果您希望主批次等待子批次完成,则应将/wait 开关添加到start

标签: windows shell batch-file cmd


【解决方案1】:

我想,你需要这样的东西:

start "MyWindow" cmd /c "ping localhost & ipconfig & pause"

【讨论】:

  • 这对我不起作用,因为一个命令也需要引号,例如dir "c:\foo 1"
  • @gotwo:问题出在哪里? start "MyWindow" cmd /c "ping localhost & dir "c:\foo 1" & pause"。请参阅 cmd /? 了解它如何处理引号。
  • @斯蒂芬,是的,你是对的。我之前的测试可能有错误。 dir... 应该是关于我使用 Powershell 的实际主题的一个更简单的示例。又是一个简化的例子:start "MyWindow" cmd /k "ping localhost & powershell -command "&{$host|gm}" & pause" 对我不起作用。 powershell -command "&{$host|gm}" 按预期工作。我已经在这里描述了解决方案。
  • @gotwo:批处理语法/转义特殊字符有时有点不直观:start "MyWindow" cmd /k "ping localhost & powershell -command "^&{$host^|gm}" & pause"
【解决方案2】:

它有助于通过^& 逃脱每个&

START program_a ^&^& program_b ^&^& program_c

【讨论】:

  • 这正是我想要的
【解决方案3】:

在批处理文件中尝试,但是两个命令(!vexe!和move)同时执行:

start "" /d "!mpwd!" /low /affinity !hex! /b cmd /v:on /c " 1^>"%lcpu%.!cnxt!" 2^>^&1 !vexe! !vcmd! && move /y "%%a" "!mrel!" "

尝试转义 && 或不转义,也将移动放入括号中。没有运气......

有什么建议吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    相关资源
    最近更新 更多