比方说,我有一个批处理文件,其中包含几行,每行以START
开头,以同时运行命令,并且我希望每个窗口弹出一个新窗口,直到完成后才暂停,而不是仅仅关闭,所以我可以在最后阅读摘要。
start myapp.exe && pause
不起作用,因为pause
命令仅在主窗口中执行,并且不会与START
一起传递。 CMD /k
可以阻止窗口,但是我想避免这种情况,请使用PAUSE
。
重要的是,我必须同时运行这些文件,并且我不想为每行创建一个单独的批处理文件。
有什么建议吗?
答案 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设置了错误代码,则不会运行暂停,并且窗口将关闭,然后才能看到它。