为何该批处理脚本的执行流无法到达后续echo语句?
批处理执行流中断原因
- 根本原因是Windows cmd环境的批处理调用规则:在一个批处理脚本中直接调用另一个批处理文件时,如果没有添加
call命令作为前缀,执行流会直接完全转移到被调用的批处理文件,被调用文件执行完成后直接结束整个进程,不会返回原调用脚本执行后续代码。 - 你当前
test.bat的首行是直接执行test1.bat > t1 && test2.bat > t2 && test3.bat > t3,运行到test1.bat时执行流就直接切换到test1.bat,执行完echo %0后就直接退出了整个执行流程,既不会执行后续的test2.bat、test3.bat调用,也不会走到后续的echo、set、del等语句。 - 你观测到的
t1、t2、t3都被创建大概率是之前测试时残留的文件,按当前代码逻辑,执行流中断后只会生成t1文件,t2和t3不会被创建。
修复方案
将test.bat的第一行修改为每个批处理调用都添加call前缀即可:
call test1.bat > t1 && call test2.bat > t2 && call test3.bat > t3
添加call后,每一个子批处理执行完成后都会主动返回父批处理,继续执行后续的代码逻辑,后续的变量读取、文件删除、结果输出都能正常运行。
内容的提问来源于stack exchange,提问作者gk_2000
相关产品推荐
相关产品推荐

