CALL – Windows CMD Command
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 118
Notice: A non well formed numeric value encountered in /home/future4tech/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 119
Call one batch program from another, or call a subroutine.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Syntax CALL [drive:][path]filename [parameters] CALL :label [parameters] CALL internal_cmd Key: pathname The batch program to run. parameters Any command-line arguments. :label Jump to a label in the current batch script. internal_cmd Run an internal command, first expanding any variables in the argument. |
The Microsoft help for the CALL command rather misleadingly states “Calls one batch program from another without stopping the parent batch program” it is true that the parent does not STOP, but it does PAUSE while the second script runs.
CALL a second batch file
The CALL command will launch a new batch file context along with any specified parameters. 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Arguments can be passed either as a simple string or using a variable: CALL MyScript.cmd "1234" CALL OtherScript.cmd %_MyVariable% Example ::----------start main.cmd----------- @Echo off CALL function.cmd 10 first Echo %_description% - %_number% CALL function.cmd 15 second Echo %_description% - %_number% ::----------end main.cmd------------- ::----------start function.cmd--------- @Echo off :: Add 25 to %1 SET /a _number=%1 + 25 :: Store %2 SET _description=[%2] ::----------end function.cmd----------- |
In many cases you will also want to use SETLOCAL and ENDLOCAL to keep variables in different batch files completely separate, this will avoid any potential problems if two scripts use the same variable name.
If you execute a second batch file without using CALL you may run into some buggy behavior: if both batch files contain a label with the same name and you have previously used CALL to jump to that label in the first script, you will find the execution of the second script starts at the same label. Even if the second label does not exist this will still raise an error “cannot find the batch label”. This bug can be avoided by always using CALL.
CALL a subroutine (:label)
The CALL command will pass control to the statement after the label specified along with any specified parameters.
To exit the subroutine specify GOTO:eof this will transfer control to the end of the current subroutine.
A label is defined by a single colon followed by a name. This is the basis of a batch file function.
1 2 3 4 5 6 7 8 9 10 11 |
CALL :sub_display 123 CALL :sub_display 456 ECHO All Done GOTO :eof :sub_display ECHO The result is %1 EXIT /B At the end of the subroutine an EXIT /B will return to the position where you used CALL (GOTO :eof can also be used for this) |
Passing by Reference
In addition to passing numeric or string values on the command line, it is also possible to pass a variable name and then use the variable to transfer data between scripts or subroutines. Passing by reference is a slightly more advanced technique but can be particularly useful when the string contains characters that are CMD delimiters or quotes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@Echo off Echo: Set "var1=Red Pippin" Set "var2=St Edmunds Pippin" Set "var3=Egremont Russet" Echo: before: var1=%var1% var2=%var2% var3=%var3% call :myGetFunc var1 var2 var3 Echo: after: var1=%var1% var2=%var2% var3=%var3% Echo:&pause&goto:eof ::---------------------------------------------- ::-- Function section starts below ::---------------------------------------------- :myGetFunc - passing a variable by reference Set "%~1=return64" Set "%~3=return65" EXIT /B |
Buggy behavior when using CALL
Redirection with & | <> does not work as expected.
If the CALL command contains a caret character within a quoted string “test^ing”, the carets will be doubled.
Advanced usage : CALLing internal commands
1 |
CALL command [command_parameters] |
CALL can also be used to run any internal command (SET, ECHO, etc) with the exception of FOR and IF.
CALL will expand any variables passed on the same line. CALL REM only partly works: redirection operators, conditional execution operators, and brackets will be not remarked.
This is undocumented behavior, in fact whenever CALL is run without a: prefix, it will always search disk for a batch file/executable called command before running the internal command. The effect of this extra disc access is that CALL SET is significantly slower than CALL, its use in loops or with a large number of variables should be avoided.
1 2 3 4 5 6 7 8 |
Example @Echo off SETLOCAL set _server=frodo set _var=_server CALL SET _result=%%%_var%%% echo %_result% |
The line shown in bold has the ‘%’ symbols tripled, CALL will expand this to: SET _result=frodo
Each CALL does one substitution of the variables. (You can also do CALL CALL… for multiple substitutions)
1 2 3 4 5 6 7 8 |
In many cases, DelayedExpansion is a better/faster method: @Echo Off Setlocal EnableDelayedExpansion Set _server=frodo Set _var=_server Set _result=!%_var%! Echo %_result% |
Errorlevels
If you run CALL SET this will reset ERRORLEVEL = 0 even though normally SET … will fail to reset an ERRORLEVEL
If you CALL a subroutine, the ERRORLEVEL will be left unchanged
If you CALL a subroutine, with a label that does not exist ERRORLEVEL will be set to 1
If you CALL an executable or resource kit utility make sure it’s available on the machine where the batch will be running, test for its existence with an IF command, and throw an error if missing.
CALL is an internal command, (internally it is closely related to GOTO).
If Command Extensions are disabled, the CALL command will not accept batch labels.
I’m truly enjoying the design and layout of your website. It’s a very easy on the eyes which makes it much more pleasant for me to come here and visit more often. Did you hire out a designer to create your theme? Great work!