Sean's Personal Code Samples And References

Call one batch program from another.

      CALL [drive:][path]filename [parameters]

      CALL :label [parameters]

      CALL internal_cmd

   pathname     The batch program to run

   parameters   Any command-line arguments

   :label       Jump to a label in the current batch script.

   internal_cmd Any internal command, first expanding any variables in the argument
CALL a second batch file 
The CALL command will launch a new batch file context along with any specified arguments. 
When the end of the second batch file is reached (or if EXIT is used), control will return to just after the initial CALL statement.

CALL a subroutine (:label) 
The CALL command will pass control to the statement after the label specified along with any specified arguments .
To exit the subroutine specify GOTO:eof this will transfer control to the end of the current subroutine.

Arguments can be passed either as a simple string or using a variable:

CALL MyScript.cmd "1234"
CALL OtherScript.cmd %_MyVariable% 

Use a label to CALL a subroutine 

A label is defined by a single colon followed by a name. This is the basis of a batch file function.

CALL :s_display_result 123 
ECHO Done 
GOTO :eof

ECHO The result is %1
GOTO :eof

At the end of the subroutine, GOTO :eof will return to the position where you used CALL.


   CALL :s_staff SMITH 100
   GOTO s_last_bit

   ECHO Name is %1
   ECHO Rate is %2
   GOTO :eof

   ECHO The end of the script
Advanced usage : CALLing internal commands

In addition to the above, CALL can also be used to run any internal command (SET, ECHO etc) and also expand any environment variables passed on the same line.

For example

   @ECHO off
   set server1=frodo3
   set server2=gandalf4
   set server3=ascom5
   set server4=last1
   ::run the Loop for each of the servers
   call :loop server1
   call :loop server2
   call :loop server3
   call :loop server4
   set _var=%1
   :: Evaluate the server name
   CALL SET _result=%%%_var%%%
   echo The server name is %_result%
   goto :eof
   :: continue below

:: Note the line shown in bold has three '%' symbols
:: The CALL will expand this to: SET _result=%server1% 
Each CALL does one substitution of the variables. (You can also do CALL CALL... for multiple substitutions)

If you CALL an executable or resource kit utility make sure it's available on the machine where the batch will be running, also check you have the latest versions of any resource kit utilities.

If Command Extensions are disabled, the CALL command will not accept batch labels. 

Sean Marcellus
There are 10 kinds of people e in this world, those who understand binary and those who don’t.