当时获得goto意外是

时间:2016-09-26 18:46:42

标签: batch-file

我目前正在开发一款具有说服系统的游戏。我已经设置了其中一个系统的所有代码,但随后又设置了2个,并且它开始给我一个错误,表示“(数字)此时未被预期”。当我选择2作为第二选择,3作为第3选择时。

代码是这样的。

@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (

set "DEL=%%a"

)
set name=Quantum

cls 

color 0a

Echo King Redwood: So 2000?

pause >nul

echo.

call :colorText 09 "1. 2500"

echo.

call :colorText 0e "2. 3000"
echo.
call :colorText 0c "3. 4000"
echo.
echo 4. 2000
echo.
set /p "purs=Enter:"
if /i %purs% == 1 ( 
goto CheckB )
if /i %purs% == 2 ( 
goto CheckY )
if /i %purs% == 3 (
goto CheckR )
if /i %purs% == 4 ( 
goto Convo )


:CheckB
set bleu=%random:~-2,1%
if %bleu% GTR 10 (
goto CheckB )
if %bleu% LSS 0 (
goto CheckB )
set /a  num = 3
set /a  reward = 2500
goto Res
:CheckY
set Yel=%random:~-2,1%
if %Yel% GTR 10 (
goto CheckY )
if %Yel% LSS 0 (
goto CheckY )
set /a num = 5
set reward = 3000
goto Res

:CheckR
set red=%random:~-2,1%
if %red% GTR 10 (
goto CheckB )
if %red% LSS 0 (
goto CheckB )
set /a num = 7
set /a reward = 4000
goto Res

:Convo
set /a reward = 2000
Echo %name%: I think that is a reasonable price.
Echo King Redwood: Very well.
Echo King Redwood: We will now take you to make sure you are
echo ready.
pause >nul


:Res
if %bleu% GEQ %num% goto Succeed
if NOT %bleu% GEQ %num% goto Fail

:Succeed
Echo %name%: I think that the struggles for such a long trip will be more then that
Echo %name%: How about %reward%? 
Echo King Redwod: OK %reward% will work.
pause >nul 
goto end

:Fail
Echo %name%: I think that you can give me %reward%.
Echo %name%: You know, for the struggles that there will be along the way.
echo If 2000 isn't good enough for you, I'll just have someone else do it.
pause >nul

:end
exit


:colorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i

1 个答案:

答案 0 :(得分:1)

首先,确保在以下之前放置a)来关闭FOR循环:CheckB。

对于“此时未预料到”错误,您有时会将空变量与某些变量进行比较。例如,通过跟踪CheckY,您设置Yel,然后继续Res并检查Bleu,它是空的,因为它尚未设置。你没有在二进制GEQ运算符旁边放任何东西,这就是它抱怨的原因。

提示:要进行调试,请尝试插入如下的ECHO语句:

:Res
echo bleu=%bleu%,num=%num%

另一个问题:使用SET时,不要用空格包围=。 SET /a将使用=周围的空格,只是因为/ a的性质,但普通的SET不会。好吧,它会在你的变量名后附加一个空格,并在前面添加一个空格,这不是你想要的。

另一个提示:你可以通过SET / a和模数运算符约束RANDOM返回的内容,就像这样。

SET /a red=%random% %% 11

这会将红色设置为0到10之间的数字,因此在选择随机数后,您不需要使用子字符串和goto例程。

另外,请考虑使用EXIT /b退出批处理文件而不是整个CMD环境。