尝试在批处理文件中生成 65 到 67 之间的随机数
Posted
技术标签:
【中文标题】尝试在批处理文件中生成 65 到 67 之间的随机数【英文标题】:Trying to generate random number between 65 and 67 in a batch file 【发布时间】:2020-06-11 21:52:15 【问题描述】:这总是生成 83,它既不是随机的,也不在所需的范围内:
set /a result=(%random%*67/32768)+65
这会生成随机数,但仍然不在我想要的范围内:
set /a result=%random% %% 67+65
这会生成随机数,所有这些数字看起来都是负数并且覆盖范围很广:
set /a result=%random% %% 67-65
这些是我通过谷歌搜索找到的选项。
【问题讨论】:
我认为您基本上是在寻找产生(random mod 3) + 65
的解决方案。
【参考方案1】:
在命令行上是:
set /a _test=(%RANDOM% % 3) + 65
在批处理文件中是:
set /a _test=(%RANDOM% %% 3) + 65
【讨论】:
完美运行!【参考方案2】:对于您的 65-67 的具体情况,您可以使用:
SET /A result=%RANDOM% * 3 / 32768 + 65
一般公式为:
%RANDOM% * (%MAX% - %MIN% + 1) / 32768 + %MINIMUM%
改编自How to use random in BATCH script?中的评论。
【讨论】:
是的,我认为这就是我在第一个示例中的目的,但我搞砸了,把“max”而不是“range”。但是我现在已经运行了几次,每次都生成 65,就像我的示例总是生成 83。 您是在循环中执行此操作吗?您可能需要添加SETLOCAL ENABLEDELAYEDEXPANSION
并使用!RANDOM!
而不是%RANDOM%
。
有什么区别?但是不,它不在循环中。
如果在循环中执行延迟扩展,您需要启用延迟扩展。您可以发布完整的代码或至少发布更多代码以获得更好的上下文吗?
它似乎正在生成一个随机结果,但它的变化如此之少以至于毫无意义。 %RANDOM% 始终是随机的,但 /3/32768+65 每次都会以相同的数字结束几分钟。 jwdonahue 的回答让我得到了更多随机结果。以上是关于尝试在批处理文件中生成 65 到 67 之间的随机数的主要内容,如果未能解决你的问题,请参考以下文章