por para extension ejemplos comando cadena buscar archivos archivo string batch-file dos

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.