@Metzgerの答えは良いスタートでした(私はそれを賛成しました)が、私はそれにいくつかの問題を見つけました。結局、私はコードをインラインに入れて、を避けることを好みCALLs
ます。これがどのように行われるかを示すための私のテストコードです:
@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR %%i IN (A B C D) DO (
CHOICE /C AN /M "Uninstall plugin %%i"
IF !ERRORLEVEL!==1 (
ECHO Uninstall %%i
) ELSE IF !ERRORLEVEL!==2 (
ECHO Skip %%i
)
)
Windows XPで@Metzgerの回答をテストしたところ、次の問題が見つかりました。
- サブルーチンがありませ
GOTO :EOF
ん(すでに修正されています)
- Windows XPでは、サブルーチン
%%i
で設定が解除されています
- (潜在的なバグ)アンインストールセットの場合
ERRORLEVEL
、SKIPが呼び出される可能性があります
このテストコードは問題を修正します:
@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR %%i IN (A B C D) DO (
CHOICE /C AN /M "Uninstall plugin %%i"
SET OERRORLEVEL=!ERRORLEVEL!
IF !ERRORLEVEL!==1 CALL :UNINSTALL %%i
IF !OERRORLEVEL!==2 CALL :SKIP %%i
)
ENDLOCAL
GOTO :EOF
:UNINSTALL
ECHO Uninstall %1
GOTO :EOF
:SKIP
ECHO Skip %1
GOTO :EOF