将 PAUSE 命令传递给批处理文件中的 START 命令

Tar*_*yaa 3 cmd batch-file

假设我有一个批处理文件,每一行都以START同时运行命令开始,我希望每个新窗口在完成时弹出并暂停,而不是关闭,以便我可以阅读摘要结尾。

start myapp.exe && pause不起作用,因为该pause命令只是在主窗口中执行并且不会通过START. CMD /k可以防止出现窗口,但我想避免这种情况并使用PAUSE.

我同时运行这些很重要,我不想为每一行创建一个单独的批处理文件。

有什么建议?

sst*_*sst 9

start命令只能用于调用单个内部或外部命令。要传递其他命令,您必须将命令传递给 CMD 的新实例并转义任何特殊字符,以便能够将它们传递给子进程(在本例中为 CMD.EXE)。

start cmd /c myapp.exe ^& pause
Run Code Online (Sandbox Code Playgroud)


另外,如果启用了命令扩展(这是默认情况),则可以使用“CMD”而不仅仅是cmdcmd.exe,...

请注意,它"CMD "后面必须有一个额外的空格,CMD所以它不同于"CMD"

引用自启动命令帮助:

如果启用了命令扩展,则通过命令行或 START 命令进行的外部命令调用更改如下:
.
.
.
当执行第一个标记是没有扩展名或路径限定符的字符串“CMD”的命令行时,“CMD”被替换为 COMSPEC 变量的值。这可以防止从当前目录中选取 CMD.EXE。

所以更安全的方法是

start "" "CMD " /c myapp.exe ^& pause
Run Code Online (Sandbox Code Playgroud)

它在功能上等同于

start "" "%COMSPEC%" /c myapp.exe ^& pause
Run Code Online (Sandbox Code Playgroud)

并且由于start命令的第一个引用参数将被解释为窗口标题,因此将一个虚拟标题(在本例中为空标题"")作为start命令的第一个参数传递。