Command line parameters
Batch files can only handle parameters %0 to %9
%0 is the program name as it was called,
%1 is the first command line parameter,
%2 is the second command line parameter,
and so on till %9.
OK, tell me something new.
Since %0 is the program name as it was called, in DOS %0 will be empty for AUTOEXEC.BAT if started at boot time.
This means that, in AUTOEXEC.BAT, you can check if it is being started at boot time or from the command line, for example to prevent loading TSR's twice.
--------------------------------------------------------------------------------
SHIFT
The batch file's limitation to handle parameters up to %9 only can be overcome by using SHIFT.
Let us assume your batchfile is called with the command line parameters 1 2 3 4 5 6 7 8 9 10 11 .
Now %1 equals 1, %2 equals 2, etcetera, until %9, which equals 9.
After your batch file handled its first parameter(s) it could SHIFT them (just insert a line with only the command SHIFT), resulting in %1 getting the value 2, %2 getting the value 3, etcetera, till %9, which now gets the value 10.
Continue this process until at least %9 is empty.
Use a loop to handle any number of command line parameters:
@ECHO OFF
:Loop
IF "%1"=="" GOTO ContinueHere your batch file handles %1SHIFT
GOTO Loop
:Continue
In Windows NT 4, 2000 and XP you can SHIFT the command line parameters starting from the nth positions using SHIFT's /n switch, where n can be any (integer) number between 0 and 8: SHIFT /4 will leave %0 through %3 untouched, and shift %5 to %4, %6 to %5, etcetera.
To use this feature, Command Extensions should be enabled.
--------------------------------------------------------------------------------
Delimiters
Some characters in the command line are ignored by batch files, depending on the DOS version, wether they are "escaped" or not, and often depending on their location in the command line:
commas ("," ) are replaced by spaces semicolons (";" ) are replaced by spaces "=" characters are often replaced by spaces the first forward slash ("/" ) is replaced by a space only if it immediately follows the command, without a leading space multiple spaces are replaced by a single space I know of several occasions where these seemingly useless "features" proved very handy.
Keep in mind, though, that these "features" may vary with the operating systems used.
More on command line parsing can be found on the PATH and FOR (especially FOR's interactive examples) pages.
--------------------------------------------------------------------------------
More options in Windows NT 4/2000/XP
Windows NT 4 introduced a set of new features for command line parameters:
%* will return all command line parameters following %0; keep in mind that Windows NT 4 will insert an extra space before %*, whereas 2000 and XP will remove all leading spaces from %*; %~dn will return the drive letter of %n (n can range from 0 to 9) if %n is a valid path or file name (no UNC); %~pn will return the directory of %n if %n is a valid path or file name (no UNC); %~nn will return the file name only of %n if %n is a valid file name; %~xn will return the file extension only of %n if %n is a valid file name; %~fn will return the fully qualified path of %n if %n is a valid file name or directory; Windows 2000 and XP add even more options.
More information can be found at the page explaining NT's CALL command.
To remove the leading space of %* introduced by NT 4 use the following commands: SET commandline=%*
IF NOT CMDEXTVERSION 2 SET commandline=%commandline:~1%
|