cmd.exe:何时使用call来运行外部程序

19
看起来是一个包含以下内容的 cmd 脚本:
prog1
prog2

与相同

call prog1
call prog2

使用CALL命令有什么意义?


请查看https://dev59.com/z3NA5IYBdhLWcg3wEZeT以获取更好的答案。 - Pacerier
3个回答

24

当你想要执行以下操作之一时,应该使用call

  • 调用另一个命令文件并在完成后返回此文件。;或者
  • 调用当前命令文件中的函数。

带有以下行的命令文件:

number2.cmd

将会链式执行number2.cmd文件,这意味着它将运行该脚本但不返回继续执行当前脚本。

至于第二个点,你可以进行如下操作:

call :subroutine
call :subroutine
goto :eof

:subroutine
    echo in here
    goto :eof

你会发现in here被打印了两次。在命令脚本中调用函数的能力实际上非常方便。


@paxdiablo,你所说的“chainnumber2.cmd文件”是什么意思? - Pacerier
@Pacerier,我的意思是当完成时它不会返回到当前脚本,这是我自 BASIC 编程时代以来一直坚持的短语,已经过去了太多的十年 :-) 请参阅 https://en.m.wikipedia.org/wiki/Chain_loading 了解详情。我希望通过编辑使其更清晰明了。 - paxdiablo

15

当你需要调用另一个批处理程序(cmd脚本)时,应该使用call。如果prog1是可执行文件(prog1.exe),使用'call'将不起作用。

例如,如果你有两个脚本:

cmd1.cmd
cmd2.cmd

而在cmd1.cmd文件中,你有一行代码:

cmd2.cmd

如果使用 cmd2.cmd 执行完成时,您的脚本将立即停止。 相反,您应该使用:

call cmd2.cmd

啊哈 - 所以外部可执行文件和外部 cmd 脚本之间的区别是关键。感谢您的启示。 - Martin
1
这是不正确的。如果你在可执行文件中使用“call”,则在可执行文件完成后,执行会返回到脚本。如果你不使用“call”,即使在可执行文件之后还有进一步的命令,整个事情也会在可执行文件完成时结束。 - user118967

3

通常情况下,call命令用于在批处理文件内运行另一个批处理文件。当被调用的批处理文件完成后,原始批处理文件的剩余部分将继续执行。

请注意,如果批处理文件不存在,将会显示错误消息。

语法为:CALL [drive:][path]filename [batch-parameters]

使用call命令没有限制。您可以在任何批处理文件中使用CALL命令来调用另一个批处理文件。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接