Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理-调用和转到之间有什么区别?_Batch File_Call_Goto - Fatal编程技术网

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