以下是我的批处理文件的代码:
:add_game_now
cls
echo Add a Game!
echo V for Victory and D for Defeat
set /p add_game=
if %add_game%==V goto add_game_now_v
if %add_game%==D goto add_game_now_d
:add_game_now_v
set /a elo=%elo%+20
if %division%==bronze goto add_game_bronze_v
if %division%==silver goto add_game_silver_v
if %division%==gold goto add_game_gold_v
if %division%==platinum goto add_game_platinum_v
if %division%==diamond goto add_game_diamond_v
if %division%==master goto add_game_master_v
if %division%==challanger goto add_game_challanger_v
:add_game_now_d
set /a elo=%elo%-15
if %division%==bronze goto add_game_bronze_d
if %division%==silver goto add_game_silver_d
if %division%==gold goto add_game_gold_d
if %division%==platinum goto add_game_platinum_d
if %division%==diamond goto add_game_diamond_d
if %division%==master goto add_game_master_d
if %division%==challanger goto add_game_challanger_d
问题在于,当我在:add_game_now
并输入V
或D
时,我会收到消息Unexpected Goto
,然后退出。
出现此错误消息的原因是什么?
如果您需要整个文件,我可以发送它。
感谢您的帮助,是的,我不擅长编码。
答案 0 :(得分:1)
您可以在标签名称中使用变量的值,而不是枚举所有这些GOTO目标标签:
SETLOCAL EnableExtensions
REM goto :EOF will terminate the batchfile
REM this only works if Extensions to CMD are enabled
:add_game_now
cls
echo Add a Game!
echo V for Victory and D for Defeat
set /p add_game=
GOTO add_game_now_%add_game%
GOTO :EOF
:add_game_now_V
:add_game_now_v
set /a elo=%elo%+20
GOTO add_game_%division%_v
GOTO :EOF
:add_game_now_D
:add_game_now_d
set /a elo=%elo%-15
GOTO add_game_%division%_d
GOTO :EOF
确保所有这些标签都存在!否则批次将崩溃。变量division
也必须存在,并且必须具有值(例如' bronze')。
请考虑使用CHOICE
代替set /p
。通过这种方式,您可以确保只允许使用大写条目,并且只有' V'或者' D'。那时你不再需要加倍的标签了。