1

私はバッチスクリプトでこのメニューを持っています:

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

現在、ユーザーが 1 を入力すると、最初のものが実行され、メニューにループバックし、2 番目の
場合は 2 などになります。ユーザーが 5 を入力すると、スクリプトが実行され、1 から 4 のステップが実行されます。順を追って。

私の質問は次のとおりです。「実行することを選択した特定のものを実行/実行することは可能ですか?」
1 と 4 を実行してメイン メニューに戻りたいとしましょう。「1(スペース)4」と入力すると、スクリプトはこれらの引数/パラメーターを受け取り、対応するオプションを見つけて実行します。それは理にかなっていますか?出来ますか?

これらのオプションをそれぞれ個別に実行するオプションもありますが、私が話しているこのアイデアにより、より効率的かつ高速になります。

4

1 に答える 1

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 ループは、「顧客」が入力したデータを処理し、スペースで区切られたすべての数値を実行します。「delims=」では、コンマ、セミコロン、および必要なものを追加できます。

于 2012-07-11T15:01:59.243 に答える