A windows batch file (called.bat
or called.cmd
) can be called from another batch file (caller.bat
or caller.cmd
) or interactive cmd.exe prompt in several ways:
- direct call:
called.bat
- using call command:
call called.bat
- using cmd command:
cmd /c called.bat
- using start command:
start called.bat
I'm quite in trouble to differentiate their intended usage based on their help text: when to use which one? e.g. why I might use 'call' command instead of direct call. What's different?
I'm interested on some summary report that analyze all 4 possibilities (and others if any missing) from various point of views: recommended use cases for which they are designed to fit, process spawning, execution context, environment, return code processing.
Note: I'm using Windows XP SP3.
One thing not clear from the comments here: When you call one batch file from another by using just its name (Case #1 in the original question), execution stops from the calling batch file. For example, in these lines:
called.bat
echo Hello
The 'echo Hello' line (and anything following it) will not be called. If you use the 'call' keyword, execution resumes after the call. So in this case:
call called.bat
echo Hello
The 'echo Hello' line will be called.
Additionally, all the variables set in the called.bat file will be passed along back to the calling process, too.
Imagine a 'called.bat' file that had this line:
set MYVAR=hello
Then, %MYVAR% would be available to the calling batch file if it used:
call called.bat
But, it would not be using
REM starts a new cmd.exe process
start called.bat
REM stops and replaces current cmd.exe process with a new one
called.bat