2015-10-04 32 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

謝謝!它的工作原理,並非常感謝您的額外提示! –