Search code examples
batch-filecmdcallsubroutine

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 box*

After GOTO:eof which line will it echo next?


Solution

  • 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.