所以在这段代码中存在一些问题,它可能只是一些标点符号错误,我还没有注意到,但由于某些原因我无法找到它。
我读到这是如何使用Do
进行循环,然后是次数,在这种情况下为“%dmg%
”,告诉我这是不是真的。
我确实有定义变量的部分;
set dmgt=0
set /a wl=1000*%upts%/%epts%
我确实已经设置了所有其他内容。
使用pause命令我发现这是问题;
if %upts%*%utroop% LEQ %epts%*%etroopt% ( goto fail
) else ( set /a dmg=%wl%*%etroop%/1000
set /a dmgt=%dmg%+%dmgt%
do %dmg%
SET /A type=%RANDOM% * 3 / 32768 + 1
if %type% == 1 ( if %snip% GEQ 1 ( set /a dmg=%dmg%-1
set /a snip=%snip%-1
)
)
if %type% == 2 ( if %mgs% GEQ 1 ( set /a dmg=%dmg%-2
set /a mgs=%mgs%-1
)
)
if %type% == 3 ( if %rif% GEQ 1 ( set /a dmg=%dmg%-1
set /a rif=%rif%-1
)
)
enddo
)
答案 0 :(得分:0)
if %upts%*%utroop% LEQ %epts%*%etroopt%
不计算每一方的值,它将the contants of upts
* the contents of utroop
串起来并将该字符串与RHS进行比较。您需要使用SET
将这两个值显式计算为变量。
您的ELSE
子句调用“块语句”,即括号系列语句的ENTIRE内容,直到)
后的结束enddo
。批处理将语句从IF
解析到ELSE
块的右括号,替换PARSE-TIME值为%var%
且 THEN的任何var
执行结果。因此,TYPE
对于块内的逻辑将保持不变。
您需要调用delayedexpansion
模式并使用!var!
访问var
的RUN-TIME值。这是通过SETLOCAL ENABLEDELAYEDEXPANSION
语句完成的,通常在批处理开始时打开@echo off
之后插入(因此在整个批处理期间将delayedexpansion和!var!
工具打开)< / p>
实际上,你不需要ELSE
条款,因为你GOTO
是真实部分的标签。这可以简化您的代码。
最后,批处理中没有DO/ENDDO
设施 - 或者至少不是那种形式。我假设您打算进行干预代码%dmg%
次。您可以使用
for /L %%z in (1,1,%dmg%) do (
intervening code
)
其中,元变量%%z
将从括号中的第一个元素递增到第二个元素的最后一个元素。 %%z
可以是任何字母,但是批量中极少数情况之一 IS 区分大小写。