There are four kinds of variables in batch files: command line arguments, environment variables,
ERRORLEVELs, and FOR variables. All but ERRORLEVEL are of type "string"; ERRORLEVELs are "byte"
Command Line Arguments
Command line arguments are strings that follow the name of the batch file on the command-line
when the batch file is executed. To reference a command-line argument in a batch file, use the percent
sign % with a digit from 0 to 9. The variable
%0 holds the name of the batch file that is being run,
%1 holds the first argument following the name,
%2 holds the second argument and so on.
A delimiter in a batch file is a space, a tab, a comma, a
semicolon, or an equal sign. When the command-line interpreter parses the list of command line
arguments and encounters a delimiter, the two strings that the delimiter separates are considered
to be different arguments. For example, the following batch file prints out the first and second
and if batfileI.bat is executed like so:
then the following output will be produced:
Like csh and sh, Windows has a set of predefined environment variables that may be used when
writing batch files. Some common Windows environment variables and the values that they
- TEMP, which is the pathname of the temporary folder
used by program applications.
- PATH, which is a list of pathnames that Windows
searches for executable files.
- PROMPT, which is the value of the DOS prompt.
The value of any environment variable may be changed using the
set command, which will be seen later. However,
remember that the command-line interpreter uses these variables to control its own operations. These
variables are reserved by the command-line interpreter and, to avoid problems, they should not be used
for purposes other than the ones for which they are intended.
The ERRORLEVEL variable holds the exit code of the last
executable program invoked, whether from running a batch file, or from before the batch file was
invoked. ERRORLEVEL remains set until another executable
program is run by the command-line interpreter. If the last executable program run does not return
any exit code, the command-line interpreter sets ERRORLEVEL
to zero. The only action that may be undertaken with ERRORLEVEL is to
compare it to a number:
where number is any number. This form returns true if the last
executable returned an exit code that is equal to or greater than
number; otherwise, false is returned.
Since ERRORLEVEL is of type "byte", its value ranges from
0 to 255. Some common values and their definitions are:
- 0 = Normal completion
- 1 = No files found
- 3 = Terminated by CTRL-BREAK
- 4 = Terminated because of error
will be used in an
if statement in the
control structures section.
FOR variables are used only in a for statement. Inside batch
files, FOR variables are always in the form of a double percent sign [%%] followed by a
single letter. The following script contains a simple
for statement that prints out all elements in the list
"1 2 3 4" in turn:
for %%a in (1 2 3 4) do echo %%a
The output is:
The variable %%a is a FOR variable. It temporarily holds
each element in the list "1 2 3 4", and thus allows the echo
command to access these elements. Do not worry about the details of the
for statement now, since it will be fully discussed in the section
about control structures. Remember, a FOR variable can be
used in a for statement only; FOR variables have no meaning if
used anywhere else.
The set Command
set displays a list of variables defined in the current
environment and their values. The set command
may also be used to create
a variable, or change the value of an already-existing variable. This command has the form:
where name is the name of the variable and
value is the value assigned to it.
It is not necessary for set to take any argument. If
set is typed at the prompt, then a list of variables
defined in the current environment is displayed. If a value is not supplied for the variable (i.e., by
typing C:\>set name),
then the current setting for that variable will be deleted from the environment. If the full form
is supplied, then name is created
(if it does not already exist) and is set to value.
Do not leave any space between name and the equal sign, OR the
equal sign and value. If a space is included, Windows will interpret the space
as part of the variable name or the value.
To reference a variable, use the following form:
When the command-line interpreter encounters a pair of percentage sign %
enclosing a variable, it replaces the form with the value of the variable.