4

我正在尝试制作基于文本的批量游戏。但是我刚开始写它时遇到了一个我以前从未遇到过的问题。

:menu
:: the game menu - opens when the game starts
cls
echo This game is still being made -- expermintal
echo Start Screen:
echo [1] View Changes
echo [2] Start Game
echo enter your choice:
set /p startchoice =
if %startchoice%==1 goto changes
if %startchoice%==2 goto startgame

当我输入 1 或 2 时,它显示错误“此时 goto 是意外的”我该如何解决?

4

4 回答 4

8

startchoice的设置不正确。set /p在您提供提示的位置使用替代语法(并删除startchoice赋值( )运算符之间的空格 - 我认为这实际上是问题的原因,但如果您使用语法=,您可以将批处理文件减少一行) set /p <variable>=<Prompt>.

goto我为, 和语句添加了两个目标,echo以便您可以看到它们已达到:

:menu
:: the game menu - opens when the game starts
cls
echo This game is still being made -- expermintal
echo Start Screen:
echo [1] View Changes
echo [2] Start Game
set /p startchoice=Enter your choice:

if %startchoice%==1 goto changes
if %startchoice%==2 goto startgame
:changes
echo Changes
goto end
:startgame
echo StartGame
:end
于 2012-12-29T01:29:15.747 回答
6

您需要在 if 比较周围加上引号,并且它不喜欢您在没有提示的情况下使用 set / p 。以下作品:

:menu
:: the game menu - opens when the game starts
cls
echo This game is still being made -- expermintal
echo Start Screen:
echo [1] View Changes
echo [2] Start Game
set /p startchoice = "enter your choice: "
if "%startchoice%"=="1" goto changes
if "%startchoice%"=="2" goto startgame
于 2012-12-29T01:29:35.357 回答
0

不要使用环境变量,试试这个:

CHOICE
IF %ERRORLEVEL% EQU 1 goto changes
IF %ERRORLEVEL% EQU 2 goto startgame

Choice 是一个允许您输入数字或 y/n 并返回错误代码的程序。%ERRORLEVEL% 是一个保存程序最后一个错误代码的变量。

您也可以进行其他比较。

EQU  - equal 
NEQ - not equal 
LSS - less than 
LEQ - less than or equal 
GTR - greater than 
GEQ - greater than or equal 
于 2012-12-29T01:30:09.987 回答
-1

可能出现故障的另一个原因是您没有正确包含 SET /PM= 变量... m 和等号之间不应有空格。

于 2017-04-18T20:22:34.797 回答