从另一个批处理程序调用一个批处理程序,而不停止父批处理程序。 call 命令接受标签作为调用的目标。
Note
调用在脚本或批处理文件外部使用时,在命令提示符处不起作用。
Syntax
call [drive:][path]<filename> [<batchparameters>]]
call [:<label> [<arguments>]]
Parameters
| Parameter | Description |
|---|---|
[<drive>:][<path>]<filename> |
指定要调用的批处理程序的位置和名称。 参数 <filename> 是必需的,并且必须具有 .bat 或.cmd扩展。 |
<batchparameters> |
指定批处理程序所需的任何命令行信息。 |
:<label> |
指定希望批处理程序控件跳转到的标签。 |
<arguments> |
指定要从开头传递到批处理程序 :<label>的新实例的命令行信息。 |
| /? | 在命令提示符下显示帮助。 |
Batch parameters
下表列出了批处理脚本参数引用 (%0, %1, ...)。
在批处理脚本中使用该 %* 值引用所有参数(例如, %1、 %2、 %3...
您可以使用以下可选语法作为批处理参数的替代 (%n:
| Batch Parameter | Description |
|---|---|
| %~1 | 展开 %1 并删除周围的引号。 |
| %~f1 | 将 %1 扩展到完全限定的路径。 |
| %~d1 | 仅将 %1 扩展为驱动器号。 |
| %~p1 | 仅 %1 扩展到路径。 |
| %~n1 | %1 仅扩展到文件名。 |
| %~x1 | 将 %1 扩展为仅文件扩展名。 |
| %~s1 | %1 扩展为仅包含短名称的完全限定路径。 |
| %~a1 | 将 %1 展开到文件属性。 |
| %~t1 | %1 展开到文件的日期和时间。 |
| %~z1 | %1 扩展到文件的大小。 |
| %~$PATH:1 | 搜索 PATH 环境变量中列出的目录,并将 %1 扩展到找到的第一个目录的完全限定名称。 如果未定义环境变量名称或搜索找不到文件,则此修饰符将展开为空字符串。 |
下表显示了如何将修饰符与复合结果的批处理参数组合在一起:
| 带修饰符的 Batch 参数 | Description |
|---|---|
| %~dp1 | %1 仅扩展到驱动器号和路径。 |
| %~nx1 | 仅将 %1 扩展到文件名和扩展名。 |
| %~dp$PATH:1 | 在 PATH 环境变量中列出的目录中搜索 %1,然后展开到找到的第一个目录的驱动器号和路径。 |
| %~ftza1 | 展开 %1 以显示与 dir 命令类似的输出。 |
在上面的示例中, %1 和 PATH 可以替换为其他有效值。 语法 %~ 由有效参数编号终止。 %~修饰符不能与 %*.
Remarks
使用批处理参数:
批处理参数可以包含可传递给批处理程序的任何信息,包括命令行选项、文件名、 %0 到 %9的批处理参数以及变量(例如, %baud%)。
<label>使用参数:通过将 call 与参数一起使用
<label>,可以创建新的批处理文件上下文,并将控制权传递给指定标签后面的语句。 第一次遇到批处理文件的末尾时(即跳转到标签后),control 返回到 call 语句之后的语句。 第二次遇到批处理文件的末尾时,将退出批处理脚本。使用管道和重定向符号:
请勿在
(|)中使用管道<或重定向符号(>或)。进行递归调用
可以创建调用自身的批处理程序。 但是,必须提供退出条件。 否则,父批处理和子批处理程序可以无限循环。
使用命令扩展
如果启用了命令扩展,则 呼叫 接受作为
<label>呼叫的目标。 正确的语法为call :<label> <arguments>.
Examples
若要从另一个批处理程序运行 checknew.bat 程序,请在父批处理程序中键入以下命令:
call checknew
如果父批处理程序接受两个批处理参数,并且希望它将这些参数传递给 checknew.bat,请在父批处理程序中键入以下命令:
call checknew %1 %2