I'd like to check if an argument to a batch file is valid based on a list of strings.
For example:
IF %1 IN validArgument1, validArgument2, validArgument3 SET ARG=%1
This would set ARG to one of the valid arguments only if it matched. Ideally case insensitively.
Using the findstr command lets you search for text within any plaintext file. Using this command within a batch file lets you search for text and create events off the results found.
Use double percent signs ( %% ) to carry out the for command within a batch file. Variables are case sensitive, and they must be represented with an alphabetical value such as %a, %b, or %c. ( <set> ) Required. Specifies one or more files, directories, or text strings, or a range of values on which to run the command.
Search for a text string in a file & display all the lines where it is found. "string" The text string to find (must be in quotes). [pathname] A drive/file(s) to search (wildcards accepted). /V Display all lines NOT containing the specified string. /C Count the number of lines containing the string.
You may also use the array approach:
setlocal EnableDelayedExpansion
set arg[1]=validArgument1
set arg[2]=validArgument2
set arg[3]=validArgument3
for /L %%i in (1,1,3) do if /I "%1" equ "!arg[%%i]!" SET "ARG=!arg[%%i]!"
In my opinion, this method is clearer and simpler to manage with multiple options. For example, you may create the array of valid arguments this way:
set i=0
for %%a in (validArgument1 validArgument2 validArgument3) do (
set /A i+=1
set arg[!i!]=%%a
)
Another possibility is to define a variable for each valid argument:
for %%a in (validArgument1 validArgument2 validArgument3) do set %%a=1
... and then just check the parameter this way:
if defined %1 (
echo %1 is valid option...
SET ARG=%1
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With