本文介绍了批处理中启动外部程序和批处理的几种不同方法,以及如何获取命令返回值,最后还介绍了批处理中命令顺序执行的几种方法的区别。
1. start、call 和直接运行
1.1 start
使用 start 命令时,当前批处理不会等待外部程序运行结束,而是继续向下执行。
使用 start 命令运行其他批处理和 windows 命令行程序时,还会创建一个新的命令行窗口,并将在新的窗口中运行新的程序,如:
1 | @echo off |
1.2 call
使用 call 命令时,当前批处理会等待外部程序或批处理运行结束,然后才继续向下执行。并且始终在当前命令行窗口中运行其他批处理和命令行程序。
1.3 直接运行
直接运行与使用 call 命令一样。但直接运行外部批处理时会破坏当前批处理的运行流程,会导致执行流程无法返回到当前批处理继续执行。
1 | @echo off |
上述示例,执行other.bat
后,无法返回到当前批处理,从而无法执行echo 4
及后面语句。
2. 获取命令的返回值
在 Windows 批处理中,%errorlevel%
变量保存着上一个命令的执行结果(即main
函数的返回值)。一般来说,0 表示执行成功,非 0 则表示执行失败,具体的非 0 值的含义则取决于具体的命令。
在批处理脚本中,可以根据%errorlevel%
的值来进行后续的处理逻辑,例如:
1 | @echo off |
运行结果如下:
1 | 系统找不到文件 un-exist.exe。 |
%errorlevel%
是上一个命令的执行结果,因此上面例子中的 9059 是 start 命令的结果,而不是 un-exist.exe 返回的结果。
3. 顺序执行
Windows 批处理提供了&
、&&
、||
、|
、>
、>>
等顺序执行方式,它们区别如下(下面说的执行成功指的是命令返回值为 0):
&
顺序执行多条命令,而不管前面命令是否执行成功。&&
顺序执行多条命令,当前面命令执行出错,后面的命令将不会执行。||
顺序执行多条命令,直到遇到执行成功的命令。|
管道命令,将前一个命令的执行结果输出到后一个命令 如:help|more
。>
文件写入命令,清除原文件中的内容后再写入。>>
文件追加写入命令