与运行其他批处理文件或其他可执行文件无关。我的批处理文件中有子程序和调用它们的main方法。每次调用一个子程序后我都会调用echo
,并且在我预期的时候数字没有打到。它似乎没有按顺序执行。
call :_beginProject %subProject%
echo 1
call :_renameBasicFile Service
echo 2
call :_renameBasicFile Test
echo 3
call :_endProject
echo 4
pause
exit /b
:_beginProject
echo in begin project
Do Other Things
:_renameBasicFile
echo in rename file
Do Other Things
:_endProject
echo in end project
Do Other Things
答案 0 :(得分:1)
我认为exit /b
意味着别的东西。结果发生了什么,但不清楚,当我调用_beginProject时,_beginProject的所有代码都在执行,就像一个没有中断的开关。 exit /b
就像是从当前的处理堆栈中解脱出来的。所以当你调用一个函数时,你会推送到一个新的执行堆栈,你需要用exit /b
弹出它,否则你将执行到文件的末尾。因此,我必须更改为在每个标签/子例程之后将控制权返回给调用堆栈:
call :_beginProject %subProject%
echo 1
call :_renameBasicFile Service
echo 2
call :_renameBasicFile Test
echo 3
call :_endProject
echo 4
pause
exit /b
:_beginProject
echo in begin project
Do Other Things
exit /b
:_renameBasicFile
echo in rename file
Do Other Things
exit /b
:_endProject
echo in end project
Do Other Things
exit /b