Batch Script that accepts Named Arguments

in batch •  7 years ago  (edited)

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...


Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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!

1 Year on Steemit

Click here to view your Board of Honor

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @captainm! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

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!