Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 批处理程序问题,如果然后数学_Variables_Batch File_While Loop_Do Loops - Fatal编程技术网

Variables 批处理程序问题,如果然后数学

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

因此,这段代码中存在一些问题,可能只是一些标点符号错误,我还没有注意到,但由于某些原因,我找不到它

我读到这是如何使用do-then进行循环的次数,在本例中为“%dmg%”,请告诉我这是否为真

我确实有定义变量的部分; set dmgt=0 set/a wl=1000*%upts%/%epts%,我已设置了所有其他设置

使用暂停命令,我发现这就是问题所在

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部分实际上不起作用。