批处理 - CALL和GOTO有什么区别?

时间:2015-12-21 18:42:55

标签: batch-file call goto

我理解代码中的标签链接,但有什么区别?

@echo off
:top
echo I love StackOverflow.com
goto :top
@echo off
:top
echo I love StackOverflow.com
call :top

提前谢谢!

3 个答案:

答案 0 :(得分:12)

你给出的例子并不能真正显示两者之间的区别。

“goto” - 转到标签。

“call” - 转到标签,然后在代码完成后返回给调用者。

在您的示例中,由于您的代码永远不会完成,因此它永远不会返回给调用者。

您可能会看到的唯一区别是,“调用”版本最终会在“返回”的列表变得如此之大,直到“填满”内存时崩溃。

要了解如何正确使用呼叫命令:http://ss64.com/nt/call.html

答案 1 :(得分:3)

在您的示例中,非常少 - 除了call版本最终会崩溃。

goto将执行转移到指定的标签;从那时起继续执行。

当处理到达callexit时,

end-of-physical-file也会将执行转移到标签但是,执行会在call之后直接转移回指令{1}}指示。

call也允许传递参数。至于作为call目标的子例程,其%1...call提供的参数,而不是作为批处理过程的命令行参数提供的。

您可以call外部批处理或可执行文件,并且在 调用例程的末尾,执行将继续执行call之后的指令。 goto只会执行目标,并完全忘记原始批次中的位置

答案 2 :(得分:0)

call有一个回复:

for /l %%i in (1,2,10) do call :process %%i
pause
Exit /b

:process
echo subroutine - %1