배치 파일에서 문자열 목록에 for 및 if 명령 사용 “ISOlanguage=” set /p

Windows 용 배치 파일을 만들고 있습니다. 배치 스크립팅을 배우기 시작했고 여기에 몇 가지 문제가 있습니다.

@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

대신에

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

사용자가 예를 들어 입력하면 eng어떻게 예를 들어 Your chosen language is English배치를 계속할 수 있습니까? 사용자가 langList에없는 것을 입력하면 “잘못된 입력, 다시 시도하십시오”라는 오류 메시지가 표시됩니다.



답변

데이터 파일 대신 배치 파일 내부에 목록을 유지하려는 곳을 읽었다 고 생각했습니다. 가장 확실한 해결책은 많은 변수를 정의하는 것이지만 다른 방법을 선호합니다.

@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