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:
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:
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:
Then, %MYVAR% would be available to the calling batch file if it used:
But, it would not be using
The batch file will be executed by the current cmd.exe instance (or a new cmd.exe instance if, for instance, double-clicked in Explorer).
Same as #1, only has an effect when used inside a batch/cmd file. In a batch file, without 'call', the parent batch file ends and control passes to the called batch file; with 'call' runs the child batch file, and the parent batch file continues with statements following call.
Runs the batch file in a new cmd.exe instance.
Start will run the batch file in a new cmd.exe instance in a new window, and the caller will not wait for completion.