如何确保Windows批处理文件(.bat)中的命令按顺序执行?
解决Windows批处理命令不按顺序执行的问题
这个问题我之前也碰到过,核心原因是Windows批处理里调用其他批处理或外部程序时,默认的执行逻辑可能不会等待操作完成就继续走下一步。咱们分两种场景来解决:
场景1:xs33a.bat是纯批处理脚本(未启动GUI程序)
如果xs33a.bat本身就是一系列控制台命令,问题出在直接调用子批处理的方式上。直接写xs33a.bat时,当前的xs33.bat会把执行权完全交给xs33a.bat,若xs33a执行完后没有返回逻辑,当前脚本可能直接终止,不会继续执行xs33b.bat。
解决方法很简单,用call命令调用子批处理,它会让当前脚本等待子批处理完全执行完毕后,再推进到下一条命令。修改你的xs33.bat内容如下:
call xs33a.bat call xs33b.bat
场景2:xs33a.bat是启动GUI编辑器(比如记事本、Notepad++)
如果xs33a.bat里是启动图形界面的编辑工具,哪怕用call也没用——因为xs33a.bat只负责启动编辑器,启动完成后它自己就执行结束了,但编辑器还在后台运行编辑文件,这时候xs33b.bat就会提前启动。
这时候需要让批处理等待编辑器关闭后再继续,你需要修改xs33a.bat里启动编辑器的命令,加上start /wait参数。比如原来xs33a.bat里的命令是:
notepad.exe targetfile.txt
改成:
start /wait notepad.exe targetfile.txt
这样xs33a.bat会一直等待记事本关闭后才会执行完毕,之后xs33.bat里的xs33b.bat才会启动。
如果不想修改xs33a.bat,也可以直接在xs33.bat里调整调用逻辑:
start /wait xs33a.bat call xs33b.bat
验证方式
修改完成后运行xs33.bat,你会发现只有等xs33a.bat对应的编辑操作完成(比如关闭编辑器),xs33b.bat才会开始执行,这样就能保证文件编辑完成后再进行计算了。
内容的提问来源于stack exchange,提问作者R. Peek
相关产品推荐
相关产品推荐

