我想根据字符串列表检查批处理文件的参数是否有效。
例如:
IF %1 IN validArgument1, validArgument2, validArgument3 SET ARG=%1
只有当它匹配时,这才会将 ARG 设置为有效参数之一。理想情况下不区分大小写。
我想根据字符串列表检查批处理文件的参数是否有效。
例如:
IF %1 IN validArgument1, validArgument2, validArgument3 SET ARG=%1
只有当它匹配时,这才会将 ARG 设置为有效参数之一。理想情况下不区分大小写。
您也可以使用数组方法:
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]!"
在我看来,这种方法更清晰,更易于管理多个选项。例如,您可以通过以下方式创建有效参数数组:
set i=0
for %%a in (validArgument1 validArgument2 validArgument3) do (
set /A i+=1
set arg[!i!]=%%a
)
另一种可能性是为每个有效参数定义一个变量:
for %%a in (validArgument1 validArgument2 validArgument3) do set %%a=1
...然后以这种方式检查参数:
if defined %1 (
echo %1 is valid option...
SET ARG=%1
)
一种稳健的方法是使用延迟扩展
setlocal enableDelayedExpansion
set "validArgs=;arg1;arg2;arg3;"
if "!validArgs:;%~1;=!" neq "!validArgs!" set ARG=%1
也可以使用 CALL 和普通扩展来完成,但它更有可能失败,具体取决于参数的值。
set "validArgs=;arg1;arg2;arg3;"
call set "test=%%validArgs:;%~1;=%%"
if "%test%" neq "%validArgs%" set ARG=%1
上述两种技术都有一个限制,即没有有效的 arg 可以包含=
并且 args 不能以*
.
您也可以使用以下蛮力方法,只要没有有效参数包含*
?
,
;
=
或<space>
set "validArgs=arg1;arg2;arg3"
for %%A in (%validArgs%) if /i "%~1"=="%%A" set ARG=%1
您可能想看看这个参数解析器。您可以修改该代码,或者它可能会为您自己的独特策略激发一些想法。