Shell 此时不应出现批量错误

Shell 此时不应出现批量错误,shell,batch-file,Shell,Batch File,我创建了一个批处理脚本,它足够完整,我可以运行它,所以我加载了它,我得到了一个错误=1,但我不明白我做错了什么,最初我有if armor=1(do…,但我两次都得到了相同的错误,谁能告诉我我做错了什么,为什么会这样 :prebattle cls if armor == 1 ( set php=100 ) set /a mlvl=%random% %% 5 + 1 if weapon=1 ( set pdmg=%random% %% 20 + 1 ) if !lvl! geq 1 if !lv

我创建了一个批处理脚本,它足够完整,我可以运行它,所以我加载了它,我得到了一个错误
=1,但我不明白我做错了什么,最初我有
if armor=1(do…
,但我两次都得到了相同的错误,谁能告诉我我做错了什么,为什么会这样

:prebattle
cls
if armor == 1 (
set php=100
)
set /a mlvl=%random% %% 5 + 1 

if weapon=1 (
set pdmg=%random% %% 20 + 1
)
if !lvl! geq 1 if !lvl! leq 5 (
set enemyno=%random% %% 3 + 1
set mdmg=%random% %% 20 + 1
)
if !lvl! geq 6 if !lvl! leq 10 (
set enemyno=%random% %% 5 + 1
set mdmg=%random% %% 50 + 1
)
if !lvl! geq 11 if !lvl! leq 15 (
set enemyno=%random% %% 9 + 1
set mdmg=%random% %% 100 + 1
)
if !lvl! geq 21 if !lvl! leq 30 (
set enemyno=%random% %% 15 + 1
set mdmg=%random% %% 150 + 1
)
if !lvl! geq 31 if !lvl! leq 45 (
set enemyno=%random% %% 20 + 1
set mdmg=%random% %% 200 + 1
)
if !lvl! geq 46 if !lvl! leq 60 (
enemyno=%random% %% 30 + 1
set mdmg=%random% %% 500 + 1
)
if enemyno == 1 (
goto enemy1
)
if enemyno=2 (
goto enemy2
)
if enemyno=3 (
goto enemy3
)
if enemyno=4 (
goto enemy4
)
if enemyno=5 (
goto enemy5
)
if enemyno=6 (
goto enemy6
)
if enemyno=7 (
goto enemy7
)
if enemyno=8 (
goto enemy8
)
if enemyno=9 (
goto enemy9
)
if enemyno=10 (
goto enemy10
)
if enemyno=11 (
goto enemy11
)
if enemyno=12 (
goto enemy12
)
if enemyno=13 (
goto enemy13
)
if enemyno=14 (
goto enemy14
)
if enemyno=15 (
goto enemy15
)
if enemyno=16 (
goto enemy16
)
if enemyno=17 (
goto enemy17
)
if enemyno=18 (
goto enemy18
)
if enemyno=19 (
goto enemy19
)
if enemyno=20 (
goto enemy20
)
if enemyno=21 (
goto enemy21
)
if enemyno=22 (
goto enemy22
)
if enemyno=23 (
goto enemy23
)
if enemyno=24 (
goto enemy24
)
if enemyno=25 (
goto enemy25
)
if enemyno=26 (
goto enemy26
)
if enemyno=27 (
goto enemy27
)
if enemyno=28 (
goto enemy28
)
if enemyno=29 (
goto enemy29
)
if enemyno=30 (
goto enemy30
)
goto prebattle

您在if语句中进行比较,因此需要两个等号或使用EQU

如果武器==1(转到标签)


如果武器EQU 1(转到标签)

这是两个最大的错误:

使用enemyno而不是%enemyno%。设置变量时,仅使用“不百分比”版本

if方程需要两个==或eq才能工作。您的固定命令应该如下所示:

if %enemyno%==7 goto enemy7
set /a enemyno=%random% %%30 +1
我不使用()是因为它并不总是需要的

我还看到你正在使用

set enemyno=%random% %% 30 + 1
它需要/a才能工作,否则它将把它作为字符串。(/a使其另存为数字。) 它看起来像:

if %enemyno%==7 goto enemy7
set /a enemyno=%random% %%30 +1

如果armor==1
这是一个字符串比较。您没有比较变量armor的值
if-arm=1
if
命令的帮助说明使用两个
=
进行字符串比较。再一次,你将武器与1进行比较,而不是变量的值。@Squashman我已经将变量装甲设置为更高的1,所以这不正确!您没有使用该变量。要引用变量,需要使用百分比符号<代码>%armor%而不是这样做三十次:
如果enemyno==1(转到enemy1)
。你可以这么做<代码>转到敌人%enemyno%顺便说一句,一个包含代码的问题应该有最小数量的代码来产生相同的问题。您应该只需要一个
if
语句就可以重现这一点,而不需要30条语句。请看,我已经在上面的注释中指出,您的代码仍然不正确,因为变量没有扩展到值。您需要使用百分比符号将变量扩展到其值。@Yoshirou,我只是陈述事实。如果您想使用不正确的代码,请继续。非常感谢!我对批处理脚本比较陌生,所以感谢您的解释:)