Windows批处理文件出现奇怪的问题。

这是一个样本

call:label1
echo check1

:label1
echo label1

:label2
echo label2

我期望的输出是
>label1
>check1

但是该批处理同时运行两个标签,并且我得到以下输出:
>label1
>label2
>check1

我正在从cmd调用批处理文件。我究竟做错了什么?

最佳答案

标签只是定义一个起点。当使用call :label指令时,从该起始点开始执行被调用的代码,直到到达批处理文件的末尾。因此,要在到达下一个子例程之前结束子例程(并返回到调用点),您将需要添加exit /bgoto :eof或任何其他跳转到批处理文件的末尾,例如

call:label1
echo check1
goto endOfWork

:label1
echo label1
goto :eof

:label2
echo label2
exit /b

:endOfWork
:eof是指向EndOfFile的隐式标签,不需要声明。

因此,goto :eof是跳转到文件末尾的位置。
exit /b相同,跳转到文件末尾。
:endOfWork是一个用户定义的标签(您在代码中使用的标签)比我在不使用前面的说明的情况下获得相同的结果要多。

关于windows - Windows批处理文件运行所有标签的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23080840/

10-13 07:50