如何在cmd中链接START命令?

Gre*_*ire 2 windows command-line cmd batch-file

我的目标是能够在单个 cmd 行中链接 START 命令。

假设我有一个 cmd 窗口(我们称之为 starter)。用一行,我想启动一个新的 cmd 窗口(我们称之为 cmd1),它将回显 1 并启动另一个 cmd 窗口(我们称之为 cmd2),在 cmd1 调用 cmd2(没有等待它完成)它也会等待(暂停),在启动器调用 cmd1 之后(不等待它完成)它将关闭(或什么都不做)

最后,我应该得到 2 个 cmd 窗口(cmd1 打印“1”,cmd2 打印 2)并且都在等待 ENTER。

运行方案:

--- Starter
    +--- Start cmd1 (Non-blocking)
    |    +--- Start cmd2 (Non-blocking)
    |    |    +--- Echo 2
    |    |    \--- Pause (Blocking cmd2)
    |    +--- Echo 1
    |    \--- Pause (Blocking cmd1)
    \---Do nothing (Starter, Incase running from bat file starter will exit)
Run Code Online (Sandbox Code Playgroud)

我在 bat 文件中写了这个 cmd 行:

title starter 
start cmd.exe /c start cmd.exe /c "echo 2 & pause" & echo 1 & pause
                       \----------cmd2-----------/
      \---------------------------cmd1----------------------------/
Run Code Online (Sandbox Code Playgroud)

(“标题启动器”只是为了了解打开了哪个窗口,不应包含在最后一行中)

使用该 cmd 行,starter 是打印 2 并等待的那个,而 cmd1 在调用 cmd2 后才退出。

该线路的运行方案:

--- Starter
    +--- Start cmd1 (Non-blocking)
    |    \--- Start cmd2 (Non-blocking)
    |         +--- Echo 2
    |         \--- Pause (Blocking cmd2)
    +--- Echo 1
    +--- Pause (Blocking Starter)
    \---Do nothing (Starter, Incase running from bat file starter will exit)
Run Code Online (Sandbox Code Playgroud)

我尝试了这条线的一些其他变体,但没有成功。

title starter 
start "cmd.exe /c start cmd.exe /c "echo 2 & pause" & echo 1 & pause"
start cmd.exe /c "start cmd.exe /c "echo 2 & pause" & echo 1 & pause"
start cmd.exe /c "start cmd.exe /c ""echo 2 & pause"" & echo 1 & pause"
Run Code Online (Sandbox Code Playgroud)

(重要的是要注意,我可以从第一个 cmd(启动器)打开 2 个 cmds(cmd1、cmd2),其结果将是我想要的运行方案的最终结果,但重要的是 cmd1 将是那个创建 cmd2)

那么,有谁知道我如何实现我想要的运行方案?

Ste*_*han 6

我希望,我理解你的要求是正确的......

title Starter
start "one" cmd.exe /c "start "two" cmd.exe /c "echo 2 ^& pause" & echo 1 &pause"
Run Code Online (Sandbox Code Playgroud)

诀窍是正确转义&通过解析的第一遍传递,然后在第二步解析。

我为所有窗口添加了标题。