Variables 批处理程序问题,如果然后数学
因此,这段代码中存在一些问题,可能只是一些标点符号错误,我还没有注意到,但由于某些原因,我找不到它 我读到这是如何使用do-then进行循环的次数,在本例中为“%dmg%”,请告诉我这是否为真 我确实有定义变量的部分; set dmgt=0 set/a wl=1000*%upts%/%epts%,我已设置了所有其他设置 使用暂停命令,我发现这就是问题所在Variables 批处理程序问题,如果然后数学,variables,batch-file,while-loop,do-loops,Variables,Batch File,While Loop,Do Loops,因此,这段代码中存在一些问题,可能只是一些标点符号错误,我还没有注意到,但由于某些原因,我找不到它 我读到这是如何使用do-then进行循环的次数,在本例中为“%dmg%”,请告诉我这是否为真 我确实有定义变量的部分; set dmgt=0 set/a wl=1000*%upts%/%epts%,我已设置了所有其他设置 使用暂停命令,我发现这就是问题所在 if %upts%*%utroop% LEQ %epts%*%etroopt% ( goto fail ) else ( set /a dmg
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
)
如果%upts%*%utroop%LEQ%epts%*%etroopt%未计算每侧的值,则它将upts*的内容串在一起,并将该字符串与RHS进行比较。您需要使用集合将这两个值显式计算为变量
ELSE子句调用一个block语句,即括号内的一系列语句直到结束后的enddo的全部内容。批处理将语句从IF解析到ELSE块的右括号,用var的解析时间值替换任何%var%,然后执行结果。因此,块内逻辑的类型将保持不变
您需要调用delayedexpansion模式并使用!瓦尔!访问var的运行时值。这是通过SETLOCAL ENABLEDELAYEDEXPANSION语句完成的,该语句通常在批处理开始时打开@echo off后插入,因此将delayedexpansion和!瓦尔!在整个批次期间,设施处于开启状态
实际上,不需要像现在这样使用ELSE子句,因为在真正的部分中使用了标签。这可以简化您的代码
最后,批处理中没有DO/ENDDO工具,或者至少没有这种形式。我假设您打算执行干预代码%dmg%次。您可以通过使用
for /L %%z in (1,1,%dmg%) do (
intervening code
)
其中,元变量%%z将从括号中的第一个元素递增到第二个元素的最后一个元素。%%z可以是任何字母,但它是批处理中极少数区分大小写的案例之一。您可能会发现ENABLEDELAYEDEXPANSION是您需要的。我无法验证,今天运行Linux。检查这个:哦,这不是顶部的完整代码,我有@echo off和enabledayedexpansion,是其他部分把它搞糟了。用if%upts%*%utroop%部分替换变量不会有什么坏处。我真的认为do/enddo部分实际上不起作用。