string - para - Cómo encontrar si una cadena está en una lista de cadenas en un archivo por lotes de DOS
findstr windows 10 (2)
También puede usar el enfoque de matriz :
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]!"
En mi opinión, este método es más claro y simple de administrar con múltiples opciones. Por ejemplo, puede crear la matriz de argumentos válidos de esta manera:
set i=0
for %%a in (validArgument1 validArgument2 validArgument3) do (
set /A i+=1
set arg[!i!]=%%a
)
Otra posibilidad es definir una variable para cada argumento válido:
for %%a in (validArgument1 validArgument2 validArgument3) do set %%a=1
... y luego simplemente verifica el parámetro de esta manera:
if defined %1 (
echo %1 is valid option...
SET ARG=%1
)
Me gustaría comprobar si un argumento en un archivo por lotes es válido en función de una lista de cadenas.
Por ejemplo:
IF %1 IN validArgument1, validArgument2, validArgument3 SET ARG=%1
Esto establecería ARG a uno de los argumentos válidos solo si coincide. Idealmente, case de forma insensible.
Un método robusto es usar expansión retrasada
setlocal enableDelayedExpansion
set "validArgs=;arg1;arg2;arg3;"
if "!validArgs:;%~1;=!" neq "!validArgs!" set ARG=%1
También se puede hacer usando CALL junto con la expansión normal, pero es más probable que falle, dependiendo del valor del parámetro.
set "validArgs=;arg1;arg2;arg3;"
call set "test=%%validArgs:;%~1;=%%"
if "%test%" neq "%validArgs%" set ARG=%1
Ambas técnicas tienen una limitación que ningún argumento válido puede contener =
y los argumentos no deben comenzar con *
.
También podría usar el siguiente método de fuerza bruta, siempre y cuando ninguno de los argumentos válidos contenga *
,
;
=
o <space>
set "validArgs=arg1;arg2;arg3"
for %%A in (%validArgs%) if /i "%~1"=="%%A" set ARG=%1
Es posible que desee echar un vistazo a este analizador de argumentos . Podría adaptar ese código, o podría generar algunas ideas para su propia estrategia única.