正如斯蒂芬在他的評論中所說的 - 當擴展random
和rand
時,您足夠了解在循環中使用延遲擴展。你爲什麼不使用var
? %var%
的值在您的循環中保持不變。您需要!var!
來查看每次迭代時存在的動態值。
for /l %%y in (1,1,%variable%) do (
set /a rand=!random! * 100/32768 + 1
echo !rand!
if !rand! GEQ %chance% (
set /a var=!var!+%varx%
)
)
但還有另一種解決方案。 SET/A知道如何自行擴展變量,沒有%
或!
。請注意,!random!
仍然需要,因爲random
不是真正的環境變量。
for /l %%y in (1,1,%variable%) do (
set /a rand=!random! * 100/32768 + 1
echo !rand!
if !rand! GEQ %chance% (
set /a var=var+varx
)
)
,或者如果你想獲得最佳性能,你可以使用+=
操作
for /l %%y in (1,1,%variable%) do (
set /a rand=!random! * 100/32768 + 1
echo !rand!
if !rand! GEQ %chance% (
set /a var+=varx
)
)
,你可以做所有的計算一個SET/A之內,無需任何IF。但是,這是非常極端的,而不是十分易讀:
for /l %%y in (1,1,%variable%) do (
2>nul set /a "rand=!random!*100/32768+1, 1/(rand/chance), var+=varx"
echo !rand!
)
var
只增加如果rand
大於或等於chance
。如果rand
小於chance
,那麼您將得到一個除0錯誤(由stderr的重定向隱藏),並且SET/A不會繼續進行。
你似乎知道延遲擴展以及如何使用它。也可以用'!var!'來代替'%var%' – Stephan
它現在似乎正在工作。非常感謝!所以在一個循環中,我應該在IF和SET中使用感嘆號? –
請注意''DOS'是80年代/ 90年代的操作系統!請改用標籤Windows。 – SteveFest