Using CALL for labels in a batch script

Mechaflash picture Mechaflash · Jul 18, 2011 · Viewed 17.1k times · Source

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?

Answer

dcp picture dcp · Jul 18, 2011

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

  1. Goes to the end of file.
  2. Then it returns to the line right afer the CALL :OMGSUB and echos the "runs away" line
  3. Then it echos the Your Mom line again
  4. Then it goes to end of file and terminates
  5. The line echo *picks up jewewlry box* never gets reached.