2015-10-04 29 views
-1
if '%class%'=='Mage' set basehealth=100 & set basemana=200 & set health=100 & set mana=200 & set speed=30 & goto cm 
if '%class%'=='Warrior' set basehealth=200 & set basemana=50 & set health=200 & set mana=50 & set speed=20 & goto cw 
if '%class%'=='Paladin' set basehealth=150 & set basemana=150 & set health=150 & set mana=150 & set speed=25 & goto cp 

它,当我选择mage并获得这部分它说“==”法师”在这个时候意外......批变量设置和比较,意外的错误

这里是我设置%类%...

我不知道是什么问题,因为它在早期工作......另外我对批处理相当新。

set /p descisionm= 
if '%descisionm%'=='1' set class=Mage & goto mageline 
if '%descisionm%'=='2' goto classchoose 
+0

@保罗 - 尼斯编辑。我无法弄清楚如何阅读原始问题的后半部分。幸运的是,我已经根据错误信息和过去的经验理解了这个问题。 – dbenham

回答

1

这几乎肯定是class值包含尾随空格的结果。 IF命令终止第一个空格处的值表达式,然后期望下一个非空格文本为==,但找到'

您可以通过用双引号括住双方而不是单引号来防止语法错误,从而允许值包含空格。但是你仍然不会得到正确的结果,因为"Mage "不等于"Mage"

定义变量时避免出现尾随空格的最佳方法是将整个赋值放在双引号内。最后一个报价后的所有内容都被忽略其他

set "class=Mage" & rem the trailing spaces are not included in the value :-) 

一个提示 - 你可以有效地利用SET/A字符串时,用单SET/A命令,空间了众多数字分配被忽略:

set /a basehealth=100, basemana=200, health=100, mana=200, speed=30 & goto cm 
+0

谢谢!它的工作原理,并非常感谢您的额外提示! –