“此时预计不会有5人”

时间:2014-09-11 02:55:06

标签: batch-file

所以,我和一个朋友正在制作批量RPG,我们的战斗系统基于随机数b / w 1& 10.代码段是:

SET /A RANval=%RANDOM% * 10 / 32768 + 1
echo %RANval%
pause
if %RANval% GTR 5 goto O_Battle
if %RANval% LSS 5 goto O_NoBattle
if %RANval% == 5 goto O_RareBattle

但问题是:它一直在崩溃,“5此时出乎意料” 有人可以帮我这个吗?

编辑:问题似乎是在我更改LSS 5和GTR 5下的5时,即如果我将其设为“LSS 3”和“GTR 3”,则表示“3此时出乎意料” (对不起,这是我第一次使用stackoverflow)

5 个答案:

答案 0 :(得分:0)

如果我将以下内容放在批处理文件中,它对我有用,那么你的goto标签可能有问题吗?

SET /A RANval=%RANDOM% * 10 / 32768 + 1
echo %RANval%

if %RANval% GTR 5 goto O_Battle
if %RANval% LSS 5 goto O_NoBattle
if %RANval% == 5 goto O_RareBattle


:O_Battle
echo "Battle"
goto end
:O_NoBattle
echo "No Battle"
goto end
:O_RareBattle
echo "Rare"
goto end

:end

答案 1 :(得分:0)

如果您输入错误消息5 was unexpected at this time正是您在Windows(XP和7,至少)下看到的内容:

if GTR 5 echo blah

这让我相信if语句中的变量名称不正确,因为类似于:

if %no_such_var% GTR 5 echo blah

会导致变量被替换为(a)并且发生错误。

因此,请检查您是否在1语句中使用l(wun)而不是if(ell)做了一些愚蠢的事情。如果需要,请使用一个很难出错的简单变量,例如r: - )


(a)有趣的是,这似乎只发生在批处理文件中,而不是来自命令行。这两者可能有不同的规则,但如果您正在测试,请确保您在批处理文件中执行此操作。

答案 2 :(得分:0)

(这是LufiaGuy2000,它不会让我在学校电脑上使用G +登录> :() 我修复了它,我只需要删除代码周围的括号。我想我不得不解决不使用括号的问题。除非别人想出解决方案。谢谢你们的答案! :)

答案 3 :(得分:0)

因为你在()内,所以你需要使用延迟扩展。

要使用延迟展开,请使用!代替%作为变量。

试试这个:

@echo off
setlocal enabledelayedexpansion

IF "A"=="A" (
  SET /A RANval=%RANDOM% * 10 / 32768 + 1
  echo !RANval!
  pause
  if !RANval! GTR 5 goto O_Battle
  if !RANval! LSS 5 goto O_NoBattle
  if !RANval! == 5 goto O_RareBattle
)

答案 4 :(得分:0)

尝试使用延迟扩展。在批处理文件的开头,输入:

setlocal enableDelayedExpansion

另外,使用!而不是%包围变量,如下所示:

if !RANval! GTR 5 goto O_Battle
if !RANval! LSS 5 goto O_NoBattle
if !RANval! == 5 goto O_RareBattle

这应该可以解决问题。