Batch file 暂停并|在批处理文件(cmd)中使用
我想在上面的命令完成后执行一个命令 实际上,kkk.exe只是delay 5s,rrrrr.exe是delay 9s。我已经尝试了以下代码,它的工作,但我不知道为什么Batch file 暂停并|在批处理文件(cmd)中使用,batch-file,cmd,pipe,pause,Batch File,Cmd,Pipe,Pause,我想在上面的命令完成后执行一个命令 实际上,kkk.exe只是delay 5s,rrrrr.exe是delay 9s。我已经尝试了以下代码,它的工作,但我不知道为什么 ::run.bat echo start test ( start kkkk.exe start rrrr.exe )|pause echo ppp pause 我知道的是: |:将第一个命令的输出重定向到第二个命令的输入 似乎|将确保完成|之前的命令,以便
::run.bat
echo start test
(
start kkkk.exe
start rrrr.exe
)|pause
echo ppp
pause
我知道的是:
:将第一个命令的输出重定向到第二个命令的输入|
- 似乎
将确保完成|
之前的命令,以便它有|
的输出。但只要运行这段代码,暂停回音就会显示出来暂停
直接无需等待9秒(rrrr.exe)。为什么?按任意键继续…
- 9秒后,我不需要实际输入任何键,
将自动运行,为什么echo ppp
- 如果我将
更改为|
,我确实需要输入一个键,以便运行&
,为什么echo ppp
|
:将第一个命令的输出重定向到
第二命令
对
似乎|
将确保完成|
之前的命令,以便
它有暂停输出。但只需运行此代码,暂停回显
将显示
按任意键继续…
直接无需等待9秒(rrrr.exe)。为什么?
管道的两侧都作为自己的进程执行。当然,pause
将显示提示(这是pause
的目的),然后等待输入(从管道的另一侧,完成后将发出“流结束”信号,该信号由pause
解释为“回车”)。如果需要,可以使用pause>nul
9秒后,我不需要实际输入任何键,echo ppp将
自动运行,为什么
包括在上面的解释中
如果我将|更改为&,我确实需要输入一个键,以便
将被运行,为什么
这是因为&
仅表示“然后执行”,因此暂停
不会收到来自先前命令的信号,因此等待键盘
注意:使用其他可执行文件时,结果可能不同。根据编程方式,start
(甚至start/wait
)可能会立即返回。(尤其是GUI应用程序)
|
:将第一个命令的输出重定向到
第二命令
对
似乎|
将确保完成|
之前的命令,以便
它有暂停输出。但只需运行此代码,暂停回显
将显示
按任意键继续…
直接无需等待9秒(rrrr.exe)。为什么?
管道的两侧都作为自己的进程执行。当然,pause
将显示提示(这是pause
的目的),然后等待输入(从管道的另一侧,完成后将发出“流结束”信号,该信号由pause
解释为“回车”)。如果需要,可以使用pause>nul
9秒后,我不需要实际输入任何键,echo ppp将
自动运行,为什么
包括在上面的解释中
如果我将|更改为&,我确实需要输入一个键,以便
将被运行,为什么
这是因为&
仅表示“然后执行”,因此暂停
不会收到来自先前命令的信号,因此等待键盘
注意:使用其他可执行文件时,结果可能不同。根据编程方式,
start
(甚至start/wait
)可能会立即返回。(尤其是GUI应用程序)。删除start
(因为这告诉我们不要等待)或使用start/wait
(如果您确实坚持使用start
)…@aschipfl:只要没有可执行文件向控制台写入任何内容,它就可以使用简单的start
。另请参阅我上面的评论。您忘了包括一个示例,其中给出了对该方法的两个详细解释:一个在答案中,另一个由用户eryksun进行的更技术性的描述,出现在下面的评论中……删除start
(因为这告诉您不要等待)或使用start/wait
(如果您确实坚持使用start
)…@aschipfl:只要没有任何可执行文件向控制台写入任何内容,它就可以使用简单的开始。另请参见我上面的评论。您忘记了包含一个示例,其中给出了对该方法的两个详细解释:一个在答案中,另一个是用户eryksun的技术说明,出现在下面的评论中。。。“此外,如果其中一个可执行文件向控制台写入任何内容,pause
将收到该信息(“任意键”)并继续…”。。。“如果可执行文件是通过start
命令启动的,则会为其打开一个单独的cmd.exe
控制台窗口,因此pause
命令无法从此类可执行文件接收任何输入…@Aacini:你是对的。(错误的测试逻辑)。删除了错误的语句。但是,当我添加codecoutstart
时,启动一个新的独立进程,因此start
ed应用程序的任何输出对管道没有影响;而call
在同一进程内执行应用程序。因此call
ed应用程序的任何输出都将通过管道传输到暂停
。因此,只有使用启动
才能同时运行多个应用程序。调用
将始终等到应用程序结束后再继续执行下一个命令。“此外,如果其中一个可执行文件向控制台写入任何内容,暂停
将收到该命令(“任意键”),然后继续…”如果可执行文件是通过