一、call命令总结
【1】call命令简介
学过汇编或C的朋友,肯定都知道call指令表示什么意思。其实,在这里它的意思也是一样的。在批处理脚本中,call命令用来从一个批处理脚本中调用另一个批处理脚本。
语法: call [ [Drive:] [Path] FileName [BatchParameters]] [:label [arguments]]
参数: [Drive:][Path] FileName 指定要调用的批处理程序的位置和名称。Filename 参数必须是.bat 或 .cmd 扩展名的类型文件。
BatchParameters 指定批处理程序所需的命令行信息(即参数项)。
调用另一个批处理程序,并且不终止父批处理程序(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
call 命令接受用作跳转目标的标签。如果在脚本或批处理文件外使用call,它将不会在命令行起作用。
【2】call命令应用
1. 基本应用。应用示例:新建两个文本文件,一个命名为call1,修改文件的类型为bat,用Notepad++打开编辑内容为:
1 echo running call1
另一个命名为call2,修改文件类型为bat,用Notepad++打开编辑内容为:
1 @echo off2 echo start3 call call1.bat4 echo running call25 echo end6 pause
双击执行call2文件,执行结果如下所示:
过程解析:
可以很清晰的看到,call调用类似于函数调用的执行逻辑:call2相当于执行主函数,在其执行过程中,需要调用到call1函数,当call1执行结束后,call2主函数再继续执行本身的命令,直至整个过程结束。
注意:call1脚本第一行没有再写@echo off语句。因为call2第一行已经关闭了命令回显状态,当call2调用call1时,此设置同样有效,由此可更深入理解调用。
2. 调用标签。应用示例:新建两个文本文件,一个命名为call3,修改文件的类型为bat,用Notepad++打开编辑内容为:
1 @echo off2 call :label3 echo 14 echo 25 6 :label7 echo 38 echo 4
另一个命名为call4,修改文件类型为bat,用Notepad++打开编辑内容为:
1 @echo off2 call call3.bat3 pause
双击执行call4文件,执行结果如下所示:
过程解析:
看到这个结果什么感觉?让你想起了什么呢?想不起来啥?一看你若有所茫的样子,就知道你把goto与这个搞混了!请看下文call命令与goto命令的区别。
3. 调用带参数的批处理。应用示例:新建两个文本文件,一个命名为call7,修改文件的类型为bat,用Notepad++打开编辑内容为:
1 echo %1 %22 echo %3
另一个命名为call8,修改文件类型为bat,用Notepad++打开编辑内容为:
1 @echo off2 call call7.bat hello world 1233 dir c:\4 pause
双击执行call8文件,执行结果如下所示:
【3】call命令与goto命令的区别
call命令的应用示例2中,我们看到了call命令对跳转标签的调用,注意调用时必须在标签名前加冒号,而goto是直接跟标签名。
关于goto命令不懂的可以参见同系列随笔《批处理命令——goto 和 :》
同上例,我们再看看goto的执行效果:新建两个文本文件,一个命名为call5,修改文件的类型为bat,用Notepad++打开编辑内容为:
1 @echo off2 goto label3 echo 14 echo 25 6 :label7 echo 38 echo 4
另一个命名为call6,修改文件类型为bat,用Notepad++打开编辑内容为:
1 @echo off2 call call5.bat3 pause
双击执行call6文件,执行结果如下所示: