Windows批处理文件出现奇怪的问题。
这是一个样本
call:label1
echo check1
:label1
echo label1
:label2
echo label2
我期望的输出是
>label1
>check1
但是该批处理同时运行两个标签,并且我得到以下输出:
>label1
>label2
>check1
我正在从cmd调用批处理文件。我究竟做错了什么?
最佳答案
标签只是定义一个起点。当使用call :label
指令时,从该起始点开始执行被调用的代码,直到到达批处理文件的末尾。因此,要在到达下一个子例程之前结束子例程(并返回到调用点),您将需要添加exit /b
或goto :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/