batch-file - 使用带有批处理的选择命令我做错了什么?
问题描述
这不是完整的代码,因为它大约有 1000 行长,但是当我来到游戏的这一部分时,问题就出在这里
choice /c abc1 /n
当我按“a”时,它应该是“medicalbag”,但它的行为就像我按“1”并返回开始
当我按“b,c,1”时,它们都会转到“medicalbag”。
我找不到解决方案,我阅读了有关该命令的信息,显然它支持这些字母和数字,当我只用数字更改它们时它们工作得很好,但我真的不确定我在这里做错了什么。
:bag
cls
echo *****************************
echo a) Medical supplies
echo b) Consumables
echo c) Weaponry
echo -----------------------------
echo 1) back
echo -----------------------------
choice /c abc1 /n
if %errorlevel% == a goto medicalbag
if %errorlevel% == b goto consumablebag
if %errorlevel% == c goto weaponrybag
if %errorlevel% == 1 goto start
:medicalbag
cls
echo *****************************
echo Bandages: %bandagecount%
echo -----------------------------
echo 1) back
echo -----------------------------
choice /c 1 /n
if %errorlevel% == 1 goto bag
:consumablebag
cls
echo *****************************
echo Canned food: %cannedfoodcount%
echo Purified water: %purifiedwatercount%
echo Dirty water: %dirtywatercount%
echo -----------------------------
echo 1) back
echo -----------------------------
choice /c 1 /n
if %errorlevel% == 1 goto bag
:weaponrybag
cls
echo *****************************
echo a) combatknife: %combatknifecount%
echo -----------------------------
echo 1) back
echo -----------------------------
choice /c a1 /n
if %errorlevel% == a goto combatknifecheck
if %errorlevel% == 1 goto bag
解决方案
使用开关定义的选择键的错误级别/c
根据列表中的键位置返回。
与/c abc1
:
keypress: errorlevels reuturned:
a 1
b 2
c 3
1 4
要获得文字按键,您需要使用 afor /f loop
来捕获按键:
For /f "delims=" %%G in ('choice /n /c abc1')Do Echo(You pressed: %%G
- 注意 -
/n
当使用 for 循环捕获按下的键时,必须使用该开关。
推荐阅读
- node.js - 如何将对话参考(字典)存储到 Azure DB 存储中
- node.js - MERN 堆栈中的 CSRF 实现
- java - 如何避免 .flatMap(x-> reactiveAction(x).thenReturn(x))
- regex - 正则表达式匹配除多个路径模式之外的所有内容
- reactjs - 如何使用私有路由配置 react-route?
- testing - 使用 -X 开关重新运行 SonarQube Scanner 以启用完整的调试日志记录
- python - pandas str.contains 匹配不使用正则表达式 boudry 的确切子字符串
- c# - C# WPF PolyLine 是我的窗口宽度的 50%
- javascript - 页面重新加载时Vue getter返回未定义
- python - 如何拆分 y 轴标签并分别为每个部分着色?