Batch Script that accepts Named Arguments
This post might help someone that wants to create a Batch or Command script that accepts named arguments.
Quick Introduction
Normally, when you pass arguments or parameters to a batch script, they are in an order and are assigned a number, for example:
MyScript.cmd "Some Value" ABC 123
You can get the value of any argument using a %
followed by it's numerical position. The first item passed is always %1
the second item is always %2
and so on.
%1 = "Some Value"
%2 = ABC
%3 = 123
%*
in a batch script refers to all the arguments (e.g. %1 %2 %3 %4 %5 ...%255
) , but only arguments %1
to %9
can be referenced by number.
My Scenario
To demonstrate my point, I made up this scenario. Let's say for some reason, when you launch Internet Explorer, you want to pass the URL to the Browser, but also have the option to pop-up an informative message before the browser starts and in certain cases have the ability to not launch the browser at all, but just display an informative pop-up message.
Batch Script File
On a side note, I use Notepad++ to edit my Batch scripts. It is also very handy for many other types of scripts because it does Syntax Highlighting.
Create a file called launch-IE.cmd
and copy the script code that is listed below into the file and save it to a folder called D:\Scripts
Note: The batch script contains remarks to help you.
ECHO OFF
CLS
:: === Variables
:: --- Script Runtime folder
SET mRuntime=D:\Scripts
:: --- Creates a Random named CMD file in Users TEMP folder
SET mFilename=%TEMP%\%RANDOM%
SET mCMDFile="%mFilename%.CMD"
:: === Check CMD FIle Arguments
:: --- Ensure there are Arguments
IF [%1]==[] GOTO :ARG_NONE
:: --- Set Variables from Arguments
FOR %%A IN (%*) DO (SET %%A)
:: --- Validate REQUIRED Arguments
IF /I [%-URL%] EQU [] GOTO :ARG_REQUIRED
:: --- Validate OPTIONAL Arguments
:: --- To show an additional pop-up message before program launches
IF /I "%-ShowMsg%" EQU "" (
SET mMsgShow=FALSE
) ELSE (
IF NOT EXIST "%-ShowMsg%" ECHO ERROR: Cannot find Message file & GOTO :SHOW_SYNTAX
SET mMsgShow=TRUE
SET mMsgCMD=START "" /D "%mRuntime%" /LOW /WAIT "%mRuntime%\popupMsg.exe" -i "%-ShowMsg%"
)
:: --- Define the Application you want to Launch
SET mRunFolder=%ProgramFiles(x86)%\Internet Explorer
SET mRunEXE=%mRunFolder%\iexplore.exe
SET mRunCMD=START "" /D "%mRunFolder%" "%mRunEXE%" %-URL%
:: === Start
:START
:: --- Create CMD to Launch Application
> %mCMDFile% ECHO ECHO OFF
IF /I [%mMsgShow%] EQU [TRUE] ECHO %mMsgCMD% >> %mCMDFile%
IF /I [%-SkipLaunch%] NEQ [TRUE] ECHO %mRunCMD% >> %mCMDFile%
:: --- Launch
START "" /MIN C:\Windows\System32\CMD.EXE /c "%mCMDFile%"
:END
EXIT
:: === SYNTAX Definition for this CMD File
:ARG_NONE
:: --- Argument Error
ECHO ERROR: No COMMAND Line arguments found...
ECHO Arguments List: %*
GOTO :SHOW_SYNTAX
:ARG_REQUIRED
ECHO ERROR: One or more REQUIRED arguments are missing..
ECHO Arguments List: %*
GOTO :SHOW_SYNTAX
:SHOW_SYNTAX
ECHO:
ECHO Syntax........: %~n0.CMD "-URL=url" "-ShowMsg=FullPathFile" "-SkipLaunch=TRUE"
ECHO:
ECHO Named Argument: -URL : This is a REQUIRED argument.
ECHO : "-URL=https://bing.com"
ECHO:
ECHO Named Argument: -ShowMsg : Show Message: OPTIONAL
ECHO : "-ShowMsg=Full Path with space\Filename.ini"
ECHO:
ECHO Named Argument: -SkipLaunch : Skip launching Main Application: OPTIONAL
ECHO : "-SkipLaunch=TRUE"
ECHO:
ECHO Press any key to close window...
PAUSE >NUL
EXIT /B 1
Create a Desktop Shortcut
Target: Use any one of these examples
D:\Scripts\launch-IE.cmd "-URL=bing.ca"
D:\Scripts\launch-IE.cmd "-URL=bing.ca" "-ShowMsg=popupMsg.ini"
D:\Scripts\launch-IE.cmd "-URL=bing.ca" "-ShowMsg=popupMsg.ini" "-SkipLaunch=TRUE"
Start in: D:\Scripts
Click on the [Change Icon...] button to select an Icon from: %ProgramFiles(x86)%\Internet Explorer\iexplore.exe
Note: popupMsg.exe is not part of Windows. It is just a utility I wrote to help me in my day to day activities in dealing with application outages.
I have zipped the Launch-IE.cmd
, popupMsg.exe
and popupMsg.ini
files for you to download if you wish to do that. [Download]
Output Example:
Thank you for reading my post. Happy scripting...
Hello @captainm, upv0t3
This is a free service for new steemit users, to support them and motivate them to continue generating valuable content for the community.
<3 This is a heart, or an ice cream, you choose.
:)
R4ND0M:
1379 7962 3841 1311
8605 6080 8917 4882
9527 5393 3331 2883
1239 6089 1491 5402
Congratulations @captainm! You received a personal award!
Click here to view your Board of Honor
Congratulations @captainm! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!