Uso de los comandos for y if para una lista de cadenas en un archivo por lotes

0

Estoy haciendo un archivo por lotes para Windows. Acabo de empezar a aprender scripting por lotes y tengo algunos problemas aquí.

@echo off
set langList=("eng","fre","chi")

:Get_ISOlanguage
set "ISOlanguage="
set /p ISOlanguage=Enter subtitle language in ISO 639-2 standard abbreviation:
set ISOlanguage="%ISOlanguage%"

for %%x in %langList% do (
if ""%ISOlanguage%"" == ""%%x"" (echo LANGUAGE SUPPORTED
goto :CONTINUE))
echo LANGUAGE NOT SUPPORTED 
goto :GET_ISOlanguage

:CONTINUE
echo ayy lmao

pause

En lugar de

for %%x in %langList% do (if ""%ISOlanguage%"" == ""%%x"" (echo LANGUAGE SUPPORTED&goto :CONTINUE))

Si el usuario escribe, por ejemplo, eng¿cómo puedo obtener, por ejemplo, Your chosen language is Englishy luego continuar el lote? Si el usuario ingresa algo que no está en la langList, quiero mostrar un mensaje de error que dice "entrada incorrecta, por favor intente nuevamente".

Arete
fuente
1
Debe comenzar con la respuesta a su pregunta anterior (que le muestra cómo usarla correctamente forpara verificar si hay una entrada válida). Y tenga una lista separada ( nameList) con los nombres de los idiomas para generar el nombre real.
DavidPostill

Respuestas:

2

Pensé que leí en alguna parte que desea mantener la lista dentro de su archivo por lotes en lugar de un archivo de datos. La solución más obvia para esto sería definir muchas variables, pero prefiero otro método:

@echo off
:Get_ISOlanguage
set "language=not supported"
set /p "ISOlanguage=Enter language code: "
for /f "tokens=3 delims=," %%i in ('find "DATA,%ISOlanguage%," "%~f0"') do set language=%%i
echo language is %language%
if "%language%"=="not supported" goto :Get_ISOlanguage


goto :eof
DATA,eng,English
DATA,fre,French
DATA,chi,Chinese
DATA,ger,German
DATA,deu,German
DATA,chn,Chinook jargon
Stephan
fuente
@Arete hizo una revisión completa.
Stephan