仅在Windows批处理脚本中选定的菜单选项上运行/执行语句

时间:2012-07-11 14:45:31

标签: parameters batch-file

我在批处理脚本中有这个菜单:

ECHO *1* - A
ECHO *2* - B
ECHO *3* - C
ECHO *4* - D
ECHO *5* - runAll
ECHO *6* - Quit

现在,我用它做的是,如果用户输入1,则它运行第一个并循环回到菜单,2个用于第二个等。
如果用户输入5,那么我的脚本将按顺序逐步运行1到4。

我的问题是:“是否可以运行/执行您选择执行的某些?” 假设我想执行1& 4并循环回主菜单。我输入“1(空格)4”,脚本接受这些参数/参数,然后找到相应的选项并执行它。是否有意义?有可能吗?

我可以选择分别运行这些选项中的每一个,但是这个想法,我正在谈论的那个,使它更有效,更快。

1 个答案:

答案 0 :(得分:3)

:begin
ECHO *1* - A
ECHO *2* - B
ECHO *3* - C
ECHO *4* - D
ECHO *5* - runAll
ECHO *6* - Quit

set /p CH=choose
for /f  "tokens=* delims= " %%A in ("%CH%") DO (
    if *%%A* EQU *1* call A
    ....
    if *%%A* EQU *4* call D
    if *%%A* EQU *5* call :callAll
    if *%%A* EQU *6* exit
)
goto :begin

:callAll
    call A
    ...
    call D
goto :eof

编辑:

:begin
ECHO *1* - A
ECHO *2* - B
ECHO *3* - C
ECHO *4* - D
ECHO *5* - runAll
ECHO *6* - Quit

set /p CH=choose
echo nul >temp.bat
set line=title "temp script"
for /f  "tokens=* delims=;, " %%A in ("%CH%") DO (
    if *%%A* EQU *1* set line=%line% &call A 
    ....
    if *%%A* EQU *4* set line=%line% &call D 
    if *%%A* EQU *5* call :callAll
    if *%%A* EQU *6* exit
)
echo %line% >>temp.bat
call temp.bat
del /s /q /f temp.bat
goto :begin

:callAll
    line=%line% &call A 
    ...
    line=%line% &call D 
goto :eof

这将创建(并在执行后删除)临时脚本,该脚本将在输入的选项后执行。您也可以创建自编辑的脚本,但代码将更难维护。 for循环处理由“customer”输入的数据,并执行由space分隔的所有数字。“delims =”你可以添加逗号,分号和你想要的数据。