Batch file 批处理-调用和转到之间有什么区别?
我理解代码中的两个链接都指向标签,但有什么区别Batch file 批处理-调用和转到之间有什么区别?,batch-file,call,goto,Batch File,Call,Goto,我理解代码中的两个链接都指向标签,但有什么区别 @echo off :top echo I love StackOverflow.com goto :top 提前谢谢你 你给出的例子并不能真正说明两者之间的区别 “goto”-转到标签 “call”-转到标签,然后在代码完成后返回调用方 在您的示例中,由于您的代码从未完成,因此它永远不会返回给调用方 您可能看到的唯一区别是,“调用”版本最终会崩溃,因为“返回到哪里”的列表将变得如此之大,直到“填满”内存 要查看如何正确使用call命令:使用c
@echo off
:top
echo I love StackOverflow.com
goto :top
提前谢谢你 你给出的例子并不能真正说明两者之间的区别 “goto”-转到标签 “call”-转到标签,然后在代码完成后返回调用方 在您的示例中,由于您的代码从未完成,因此它永远不会返回给调用方 您可能看到的唯一区别是,“调用”版本最终会崩溃,因为“返回到哪里”的列表将变得如此之大,直到“填满”内存
要查看如何正确使用call命令:使用
call
返回:
for /l %%i in (1,2,10) do call :process %%i
pause
Exit /b
:process
echo subroutine - %1
在您的示例中,除了
调用
版本之外,很少有其他版本最终会崩溃
goto
将执行转移到指定的标签;从那一点开始执行
call
也会将执行转移到标签上,但当处理到达退出
或物理文件结束
时,执行会在调用
指令后直接转移回指令
call
还允许传递参数。对于作为调用
目标的子例程,其%1…
是调用
提供的参数,而不是作为批处理过程的命令行参数提供的参数
您可以
调用
外部批处理或可执行文件,在调用的例程结束时,执行将在调用
后随指令继续goto
将只执行目标,并完全忘记它在原始批中的位置您是否在命令提示符中键入过goto/?
或call/?
?call还为SETLOCAL/ENDLOCAL命令建立了新的作用域。ENDLOCAL无法释放调用之前定义的变量。另外,当从调用返回时,还有一个隐式的ENDLOCAL。这个链接非常有用。谢谢
for /l %%i in (1,2,10) do call :process %%i
pause
Exit /b
:process
echo subroutine - %1