Using CALL for labels in a batch script
When using the CALL command to call a label in a batch script, and you end the sub-routine with GOTO:eof, what happens from there? Does it return back to where the sub-routine's CALL is located? Or does it continue on after the location of the call script?
For example:
ECHO It's for my college fund.
CALL :OMGSUB
ECHO *runs away and cries like a little girl*
:OMGSUB
ECHO Your mom goes to college.
GOTO:eof
ECHO *picks up jewelry b开发者_如何学编程ox*
After GOTO:eof which line will it echo next?
Why not just run it and see for yourself? I saved your script to a batch file called foo.bat, and I changed the Your mom goes to college.
to have an echo
in front.
C:\temp>foo
C:\temp>ECHO It's for my college fund.
It's for my college fund.
C:\temp>CALL :OMGSUB
C:\temp>echo Your mom goes to college.
Your mom goes to college.
C:\temp>GOTO:eof
C:\temp>ECHO *runs away and cries like a little girl*
*runs away and cries like a little girl*
C:\temp>echo Your mom goes to college.
Your mom goes to college.
C:\temp>GOTO:eof
C:\temp>
So it's easy to see that after the OMGSUB
is called, it
- Goes to the end of file.
- Then it returns to the line right afer the
CALL :OMGSUB
and echos the "runs away" line - Then it echos the Your Mom line again
- Then it goes to end of file and terminates
- The line
echo *picks up jewewlry box*
never gets reached.
GOTO:eof
ends the OMGSUB
subroutine in your batch file. So ECHO *runs away and cries like a little girl*
executes next, but ECHO Your mom goes to college.
will also execute again.
Sidenote which was also a comment:
You could replace GOTO:eof
with exit /b
. Also, ECHO Your mom goes to college.
will be executed after ECHO *runs away and cries like a little girl*
, which may not be intended. The solution would be to add an exit
after ECHO *runs away and cries like a little girl*
.
精彩评论