问题
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 box*
After GOTO:eof which line will it echo next?
回答1:
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 :OMGSUBand 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.
回答2:
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*.
来源:https://stackoverflow.com/questions/6737913/using-call-for-labels-in-a-batch-script