| Parameter Replacement |
You should by now know what a "parameter" is, this section discussed the use (reading and manipulation) of those values. Batch files take parameters which are referred to by numbers (1-9) and "0" is used to represent the batch file itself. The first parameter is referred to as "%1", the second "%2" etc.
To handle an unknown number of parameters you can use the "SHIFT" command.
In the table below "1" is used (for the first parameter). As the syntax only supports a single "character" for the parameter "number" there is a trick (using the ""FOR" command) to similarly process environment variables (or strings or command output) as demonstrated here (for a string) to determine the full name of the current directory:
set FileName=SomeFile.txt
for %%X in ("%FileName%") do set FullFileName=%%~fX
| The Syntax of Parameter Replacement |
| Code | Description |
|---|---|
| %* | Refers to all the arguments (e.g. %1 %2 %3 %4 %5 ...). In Windows NT 4 a leading space is added to %*. In Windows 2000+ all leading spaces are removed from %* |
| %~1 | Expands %1 removing any surrounding quotes (") For example: set FileNameQuotesRemoved=%~1 |
| %~f1 | Expands %1 to a fully qualified path name For example:
set FileNameIsParm1FullyQualified=%~f1
for %%F in (".") do set FullCurrentDir=%%~fF |
| %~$PATH:1 | Searches the directories listed in the PATH environment variable and expands %1 to the fully qualified name of the first one found. It does not look in the current directory and returns "" if not found. For example:
@echo off
set FullNameOfCtextExe=
for %%F in ("ctext.exe") do set FullNameOfCtextExe=%%~$PATH:F
if "%FullNameOfCtextExe%" == "" echo "CTEXT.EXE" not found in PATH (weird)!
if not "%FullNameOfCtextExe%" == "" echo "CTEXT.EXE" found at: "%FullNameOfCtextExe%" |
| %~d1 | Expands %1 to a drive letter only For example:
for %%X in ("%BatchFile%") do set FileDrive=%%~dX
echo FileDrive = %FileDrive% ("\\" for UNC filename) |
| %~p1 | Expands %1 to a path only For example:
for %%X in ("%BatchFile%") do set FilePath=%%~pX
echo FilePath = %FilePath% (won't have drive letter attached) |
| %~n1 | Expands %1 to a file name only For example:
set FileThis=C:\TMP\SomeFile.Extn
...
for %%F in ("%FileThis%") do set FileThisSN=%%~nF%%~xF
echo File without path or drive (shortname) = %FileThisSN% |
| %~x1 | Expands %1 to a file extension only For example:
for %%X in ("%BatchFile%") do set FileExtn=%%~xX
echo FileExtn = %FileExtn% |
| %~s1 | Changes the meaning of n and x options to reference the 8.3 file name instead |
| %~a1 | Expands %1 to file attributes For example:
for %%X in ("%BatchFile%") do set FileAttr=%%~aX
echo The files attributes = %FileAttr% |
| %~t1 | Expands %1 to date/time of file For example:
for %%X in ("%BatchFile%") do set FileTime=%%~tX
echo File is timestamped with a modification time of: %FileTime% |
| %~z1 | Expands %1 to size of file For example:
for %%X in ("%BatchFile%") do set FileSize=%%~zX
echo File has %FileSize% bytes |
The modifiers can be combined to get compound results:
| Code | Description |
|---|---|
| %~dp1 | Expands %1 to a drive letter and path only |
| %~nxx1 | Expands %1 to a file name and extension only |
| %~dp$PATH:1 | Searches the directories listed in the PATH environment variable for %1 and expands to the drive letter and path of the first one found. |
| %~ftza1 | Expands %1 to a DIR like output line |
Many of the file manipulations above are demonstrated in the file name manipulation example code.
![]() | ![]() |