在完成更多工作之前,请等待批处理子程序标签完成

时间:2017-03-13 23:52:10

标签: batch-file

与运行其他批处理文件或其他可执行文件无关。我的批处理文件中有子程序和调用它们的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

1 个答案:

答案 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