choice 交互式选择
choice 给脚本加一道选择题:按指定字符集中的按键返回对应的 ERRORLEVEL,字符在集合中的位置就是返回值,从 1 开始计数,还支持超时后自动选默认项。它适合安装向导、维护确认、危险操作二次确认这类需要人工介入的场景。要记住 if errorlevel 是「大于等于」语义,判断时必须从大到小写。
基本信息
| 适用平台 | Windows CMD 与批处理 |
|---|---|
| 语法 | choice /c 字符集 [/n] [/t 秒 /d 默认字符] [/m 提示语] |
| 返回值 | ERRORLEVEL 从 1 开始,对应字符在集合中的序号 |
| 超时 | 必须与默认选项配对使用 |
| 常用开关 | /n 隐藏选项列表 |
典型使用场景
- 危险操作之前要求用户明确确认继续或取消
- 脚本启动时让人选择运行模式,例如生产或测试
- 无人值守场景用超时默认项保证脚本继续执行
- 安装脚本里让人选择安装目录或安装的组件
- 维护脚本确认是否重启、是否继续下一步
常用示例
常用示例
choice /c YNC /m "是否继续? [Y]是 [N]否 [C]取消"
if errorlevel 3 echo 用户取消 & exit /b 1
if errorlevel 2 echo 用户选否 & exit /b 0
if errorlevel 1 echo 用户选是
REM 10 秒无人按键则默认选 N:
choice /c YN /t 10 /d N /m "继续吗?"
REM 隐藏选项列表,只显示自定义提示:
choice /c YN /n /m "确认继续? (Y/N)"开关与语义
| 开关或语义 | 说明 | 注意 |
|---|---|---|
| /c 字符集 | 定义可选按键 | 返回值按顺序从 1 开始 |
| /t 秒 /d 字符 | 超时与默认选项 | 两者必须配对使用 |
| /m 提示语 | 自定义提示文字 | 建议写清每个按键含义 |
| if errorlevel N | 大于等于语义 | 判断必须从大到小写 |
if errorlevel 的判断是大于等于:若先判断 errorlevel 1,那么返回 2 或 3 时同样会命中,所以条件顺序必须从大值往小值写,否则后面的分支永远走不到。
在计划任务这类无交互环境里,choice 不设超时就会长期挂起;必须配上 /t 与 /d,或者干脆改成条件判断,避免依赖人工输入。分支处理时把用户的选择记进日志,事后追溯更方便。