@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