@ECHO OFF @REM ***** CatchArg.cmd @REM ***** This is excellent code to parse parameter in Batch files @REM ***** @REM ***** Author: Ralf Ulrich (see EMail Addresses) @REM ***** @setlocal @echo off REM ***** Change "echo my_Progi" to the name of the program to run set PROGI=echo my_Progi&rem REM ***** &rem prevents from space to be inserted at the end! REM ***** This variable is used for the valid parameters checked so far set PARAM=&rem REM ***** This variable is used to save the order of the first 7 parameters set ORDER=$&rem REM ***** This variables used for --HELP message! set H1=%0 execs "%PROGI%" only with parameters in special order! set H2="/Arg1 /Arg3" or "/Arg2 /Arg3" or "/Arg3 /Arg1" REM ***** This is the main loop for the parameter processing :$Loop REM ***** check if there is a parameter IF '%1' == '' GOTO $End1 REM ***** Process the next parameter SHIFT REM ***** If Cmd.exe does not find the label, it shall not output REM ***** the SysError but echo defined Help (H1 & H2). goto X%0 2>NUL || (echo dismissed "%0" &echo %H1% &echo %h2%) REM ***** Or insert a default execution: (%PROGI% --Help) REM ***** Insert a label for every possible parameter :X/Arg1 set ORDER=%ORDER%1&rem set PARAM=%PARAM% %0&rem echo accepted "%0" goto $Loop :X/Arg2 set ORDER=%ORDER%2&rem set PARAM=%PARAM% %0&rem echo accepted "%0" goto $Loop :X/Arg3 set ORDER=%ORDER%3&rem set PARAM=%PARAM% %0&rem echo accepted "%0" goto $Loop :$End1 goto %ORDER% 2>NUL || (echo Invalid parameter order, possible: &echo %H2%) REM ***** Insert a label for every possible parameter order here REM ***** For example you can call this sample with the parameter REM ***** in the following order: REM ***** CatchArg.cmd /arg1 /arg3 :$13 REM ***** CatchArg.cmd /arg2 /arg3 :$23 REM ***** CatchArg.cmd /arg3 /arg1 :$31 REM ***** all other possible parameter orders are invalid! REM ***** if Cmd.exe does not find a fitting label it executes: REM ***** "echo Invalid parameter order, possible: &echo ..." REM ***** "PROGI" inserts the main code here: %PROGI%%PARAM% REM ***** Remember the first catch already inserted a space in front of PARAM REM ***** This label marks the end of the program :$End2