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

时间:2018-11-23 22:03:10

标签: batch-file cmd

比方说,我有一个批处理文件,其中包含几行,每行以START开头,以同时运行命令,并且我希望每个窗口弹出一个新窗口,直到完成后才暂停,而不是仅仅关闭,所以我可以在最后阅读摘要。

start myapp.exe && pause不起作用,因为pause命令仅在主窗口中执行,并且不会与START一起传递。 CMD /k可以阻止窗口,但是我想避免这种情况,请使用PAUSE

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

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

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

start cmd /c myapp.exe ^& pause


另外,如果启用了命令扩展名(默认情况),可以使用“ CMD” 代替 cmd cmd.exe >,...

请注意,它必须为"CMD ",并且在CMD之后有一个额外的空格,因此它不同于"CMD"

引自启动命令帮助:

  

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

所以更安全的方法是

start "" "CMD " /c myapp.exe ^& pause

在功能上等同于

start "" "%COMSPEC%" /c myapp.exe ^& pause

由于start命令的第一个带引号的参数将被解释为Windows标题,因此将虚拟标题(在这种情况下为空标题"")作为{的第一个参数{1}}命令。

答案 1 :(得分:-1)

您只需要使用^来使&&运算符转义,例如:with open("f","w") as fp: fp.write(s) # s is string

但是,无论第一个命令是否成功,都最好使用运行第二个命令的&运算符,否则,如果myapp.exe设置了错误代码,则不会运行暂停,并且窗口将关闭,然后才能看到它。