批处理文件:将选择从动态菜单导出到变量?
Batch File: Export selection from dynamic menu to variable?
好的,开始...
我正在构建一个批处理文件,其中包含一个根据多个 ini 文件中的设置动态设置的菜单,我使用了在上一个问题中向我建议的脚本 。
现在,我需要添加用户输入,将所选菜单选项导出到另一个变量,在普通菜单中,不是动态设置的,这很简单,我已经做了很多次,但我想不通在这种情况下该怎么做。
这是我当前的脚本:
@echo off
setlocal EnableDelayedExpansion
:LangMenu
for /L %%D in (1,1,20) do (
if exist Common\Settings\Data%%D.ini for /F "eol=# tokens=1,2 delims==" %%a in (Common\Settings\Data%%D.ini) do (
set line=%%a
if "!line:~2,5!" neq "clude" (
REM Define "normal" variables, i.e. Compressor, Method, etc.
set %%a=%%b
) else if "!line:~7!" neq "" (
REM Define the base array elements, i.e. D1IncludeAR=%%b, D1ExcludeAR=%%b, ...
set D%%D%%a=%%b
REM Set Show?? array elements with value equal 1, i.e. ShowAR=1, ...
REM when anyone of DiInclude?? or DiExclude?? corresponding elements was given
if defined D%%D%%a set Show!line:~7!=1
)
)
)
:LangContinue
REM Define a list of language abbreviations, i.e. "langs=AR CZ DE ..."
REM and the corresponding language names array, i.e. lang[AR]=Arabic, ...
REM At same time, calculate original OptNum
for %%a in ("AR=Arabic" "CZ=Czech" "DE=German" "EN=English" "ES=Spanish" "ESMX=Spanish (Mexico)"
"FR=French" "HU=Hungarian" "IT=Italian" "JP=Japanese" "KR=Korean" "PL=Polish"
"PR=Portuguese" "PRBR=Portuguese (Brazil)" "RU=Russian" "ZH=Chinese") do (
for /F "tokens=1,2 delims==" %%b in (%%a) do (
set "langs=!langs! %%b"
set "lang[%%b]=%%c"
set /A "OptNum+=Show%%b"
)
)
:LangSelect
cls
REM Show the language menu
set #=0
for %%a in (%langs%) do (
if defined Show%%a (
set /a #+=1
echo [!#!] !lang[%%a]!
)
)
set /p SelectLang=Please Choose The Language You Want:
if not "%SelectLang%"=="" Goto LangSet
if "%SelectLang%"=="" goto LangError
:LangError
cls
Echo ERROR: No Language Selected!!
pause
goto LangSelect
:LangSet
if "%SelectLang%"=="1" set LangIs=1
echo Selected Language = %LangIs%
请注意:我只是暂时将 1 放入 set LangIs 中,这样我就不会收到 echo is off 消息,这根本不是我需要的,只是占位符。
我需要的是将 LangIs 变量设置为选择的选项...
一个例子:
菜单输出是这样的:
[1] Arabic
[2] German
[3] English
[4] Spanish
[5] Italian
Please choose the language you want:
上面例子中的可变语言可以是任何语言,甚至可以列出多达 16 种语言,数字是动态设置的,所以如果可用语言不同的 5 种语言,它仍然是 1-5。
我需要一种方法,用户输入的编号选项将写入一个变量,其中显示的是语言名称,因此,例如,如果用户键入 5,我需要一个变量,该变量将具有 "Arabic" 或 "AR" 在其中。
所以,例如,如果我使用 echo 命令来显示选择,如果选择了数字 1(在上面的菜单示例中),它应该输出类似这样的内容:
Selected Language = AR
或
Selected Language = Arabic
或者菜单中数字 1 指定的任何语言。
此变量稍后必须在我的脚本中检查多达 20 次不同的时间以检查选择了哪种语言以便根据所选语言设置另一个变量。
如有任何建议,我们将不胜感激。
:LangSelect
cls
REM Show the language menu
set #=0
for %%a in (%langs%) do (
if defined Show%%a (
set /A #+=1
echo [!#!] !lang[%%a]!
set "option[!#!]=%%a"
)
)
set /P "SelectLang=Please Choose The Language You Want: "
if defined option[%SelectLang%] Goto LangSet
:LangError
cls
Echo ERROR: Invalid Language Selected!!
pause
goto LangSelect
:LangSet
set "LangIs=!option[%SelectLang%]!"
echo Selected Language = %LangIs% (!lang[%LangIs%]!)
好的,开始...
我正在构建一个批处理文件,其中包含一个根据多个 ini 文件中的设置动态设置的菜单,我使用了在上一个问题中向我建议的脚本
现在,我需要添加用户输入,将所选菜单选项导出到另一个变量,在普通菜单中,不是动态设置的,这很简单,我已经做了很多次,但我想不通在这种情况下该怎么做。
这是我当前的脚本:
@echo off
setlocal EnableDelayedExpansion
:LangMenu
for /L %%D in (1,1,20) do (
if exist Common\Settings\Data%%D.ini for /F "eol=# tokens=1,2 delims==" %%a in (Common\Settings\Data%%D.ini) do (
set line=%%a
if "!line:~2,5!" neq "clude" (
REM Define "normal" variables, i.e. Compressor, Method, etc.
set %%a=%%b
) else if "!line:~7!" neq "" (
REM Define the base array elements, i.e. D1IncludeAR=%%b, D1ExcludeAR=%%b, ...
set D%%D%%a=%%b
REM Set Show?? array elements with value equal 1, i.e. ShowAR=1, ...
REM when anyone of DiInclude?? or DiExclude?? corresponding elements was given
if defined D%%D%%a set Show!line:~7!=1
)
)
)
:LangContinue
REM Define a list of language abbreviations, i.e. "langs=AR CZ DE ..."
REM and the corresponding language names array, i.e. lang[AR]=Arabic, ...
REM At same time, calculate original OptNum
for %%a in ("AR=Arabic" "CZ=Czech" "DE=German" "EN=English" "ES=Spanish" "ESMX=Spanish (Mexico)"
"FR=French" "HU=Hungarian" "IT=Italian" "JP=Japanese" "KR=Korean" "PL=Polish"
"PR=Portuguese" "PRBR=Portuguese (Brazil)" "RU=Russian" "ZH=Chinese") do (
for /F "tokens=1,2 delims==" %%b in (%%a) do (
set "langs=!langs! %%b"
set "lang[%%b]=%%c"
set /A "OptNum+=Show%%b"
)
)
:LangSelect
cls
REM Show the language menu
set #=0
for %%a in (%langs%) do (
if defined Show%%a (
set /a #+=1
echo [!#!] !lang[%%a]!
)
)
set /p SelectLang=Please Choose The Language You Want:
if not "%SelectLang%"=="" Goto LangSet
if "%SelectLang%"=="" goto LangError
:LangError
cls
Echo ERROR: No Language Selected!!
pause
goto LangSelect
:LangSet
if "%SelectLang%"=="1" set LangIs=1
echo Selected Language = %LangIs%
请注意:我只是暂时将 1 放入 set LangIs 中,这样我就不会收到 echo is off 消息,这根本不是我需要的,只是占位符。
我需要的是将 LangIs 变量设置为选择的选项...
一个例子: 菜单输出是这样的:
[1] Arabic
[2] German
[3] English
[4] Spanish
[5] Italian
Please choose the language you want:
上面例子中的可变语言可以是任何语言,甚至可以列出多达 16 种语言,数字是动态设置的,所以如果可用语言不同的 5 种语言,它仍然是 1-5。
我需要一种方法,用户输入的编号选项将写入一个变量,其中显示的是语言名称,因此,例如,如果用户键入 5,我需要一个变量,该变量将具有 "Arabic" 或 "AR" 在其中。
所以,例如,如果我使用 echo 命令来显示选择,如果选择了数字 1(在上面的菜单示例中),它应该输出类似这样的内容:
Selected Language = AR
或
Selected Language = Arabic
或者菜单中数字 1 指定的任何语言。
此变量稍后必须在我的脚本中检查多达 20 次不同的时间以检查选择了哪种语言以便根据所选语言设置另一个变量。
如有任何建议,我们将不胜感激。
:LangSelect
cls
REM Show the language menu
set #=0
for %%a in (%langs%) do (
if defined Show%%a (
set /A #+=1
echo [!#!] !lang[%%a]!
set "option[!#!]=%%a"
)
)
set /P "SelectLang=Please Choose The Language You Want: "
if defined option[%SelectLang%] Goto LangSet
:LangError
cls
Echo ERROR: Invalid Language Selected!!
pause
goto LangSelect
:LangSet
set "LangIs=!option[%SelectLang%]!"
echo Selected Language = %LangIs% (!lang[%LangIs%]!)