Using Aliases in Batch Files
One way to simplify batch file programming is to use aliases to hide
unnecessary detail inside a batch file. For example, suppose you want a
batch file to check for certain errors, and display a message and exit if
one is encountered. This example shows one way to do so:
setlocal
unalias *
alias error `echo. & echo ERROR: %$ & goto dispmenu`
alias fatalerror `echo. & echo FATAL ERROR: %$ & quit`
alias in `pushd %1 & %2$ & popd`
if not exist setup.btm fatalerror Missing setup file!
call setup.btm
cls
:dispmenu
text
1. Word Processing
2. Spreadsheet
3. Communications
4. Exit
endtext
echo.
inkey Enter your choice: %%userchoice
switch %userchoice
case 1
input Enter the file name: %%fname
if not exist fname error File does not exist
in d:\letters c:\wp60\wp.exe
case 2
in d:\finance c:\quattro\q.exe
case 3
in d:\comm c:\comsw\pcplus.exe
case 4
goto done
default
error Invalid choice, try again
endswitch
goto dispmenu
:done
endlocal
The first alias, ERROR, simply displays an error message and jumps to the
label DISPMENU to redisplay the menu. The "%$" in the second ECHO command
displays all the text passed to ERROR as the content of the message. The
similar FATALERROR alias displays the message, then exits the batch file.
The last alias, IN, expects 2 or more command-line arguments. It uses the
first as a new working directory and changes to that directory with a
PUSHD command. The rest of the command line is interpreted as another
command plus possible command line parameters, which the alias executes.
This alias is used here to switch to a directory, run an application, and
switch back. It could also be used from the command line.
The following lines print a menu on the screen and then get a keystroke
from the user and store the keystroke in an environment variable called
userchoice. Then the SWITCH command is used to test the user's keystroke
and decide what action to take.
There's another side to aliases in batch files. If you're going to
distribute your batch files to others, you need to remember that they may
have aliases defined for the commands you're going to use. For example if
the user has aliased CD to CDD and you aren't expecting this, your file
may not work as you intended. There are two ways to address this problem.
First, you can use SETLOCAL, ENDLOCAL, and UNALIAS to clear out aliases
before your batch file starts and restore them at the end, as we did in
the previous example. Remember that SETLOCAL and ENDLOCAL will save and
restore not only the aliases but also the environment, the current drive
and directory, and various special characters.
If this method isn't appropriate or necessary for the batch file you're
working on, you can also use an asterisk [*] before the name of any
command. The asterisk means the command that follows it should not be
interpreted as an alias. For example the following command redirects a
list of file names to the file FILELIST:
dir /b > filelist
However, if the user has redefined DIR with an alias this command may not
do what you want. To get around this just use:
*dir /b > filelist
The same can be done for any command in your batch file. If you use the
asterisk, it will disable alias processing, and the rest of the command
will be processed normally as an internal command, external command, or
batch file. Using an asterisk before a command will work whether or not
there is actually an alias defined with the same name as the command. If
there is no alias with that name, the asterisk will be ignored and the
command will be processed as if the asterisk wasn't there.
Created using Inf-PHP v.2 (c) 2003 Yuri Prokushev
Created using Inf-HTML v.0.9b (c) 1995 Peter Childs