【问题标题】:Batch - What is the difference between CALL and GOTO?批处理 - CALL 和 GOTO 有什么区别?
【发布时间】:2016-03-27 22:03:14
【问题描述】:

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

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

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

提前谢谢你!

【问题讨论】:

  • 您是否曾在命令提示符下输入过goto /?call /?

标签: batch-file call goto


【解决方案1】:

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

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

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

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

查看调用命令如何正确使用:http://ss64.com/nt/call.html

【讨论】:

  • 那个链接非常有用。谢谢
【解决方案2】:

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

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

call 也将执行转移到标签但是当处理到达exitend-of-physical-file 时,直接将执行转移回call 指令之后的指令。 p>

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

您可以call 一个外部批处理或可执行文件,并且在 调用例程结束时,将继续执行call 之后的指令。 goto 将简单地执行目标,并完全忘记它在原始批处理中的位置

【讨论】:

  • CALL 还为 SETLOCAL / ENDLOCAL 命令建立了一个新范围。 ENDLOCAL 不能释放在 CALL 之前定义的变量。此外,从 CALL 返回时还有一个隐式 ENDLOCAL。
【解决方案3】:

call 有回报:

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

:process
echo subroutine - %1

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 2016-06-11
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多