【问题标题】:Random number formula returns same number batch随机数公式返回相同的数字批次
【发布时间】:2013-03-12 21:41:29
【问题描述】:

我试图在 1 和一个变量之间创建一个随机数,每次程序运行时这个变量都会改变。到目前为止我正在使用这个: SET /A 结果=%random%*%var%/32768+1

但是每次我重新运行批处理文件时,它都会返回相同的数字,人们知道发生了什么吗?

提前致谢

【问题讨论】:

  • 你应该为你使用的语言添加一个标签。

标签: random batch-file cmd


【解决方案1】:

试试这个:

set /a result=(%random% %% %var%) + 1

【讨论】:

  • 在我的系统上,%random% 只是随着时间的推移而增加,因此并不是特别随机。如果您每次运行时都期望得到非常不同的结果,那么使用模数会产生更多随机的结果。
  • 没有。 %random% 具有通过%random%*var/32768 保留的特定分布。模算子改变了这个分布,并创建了一个比原来“更少随机”的不同的分布。
  • 当我在批处理文件中使用 %random% 并运行它两到 3 次时,我每次只得到一个略高的数字。我猜这与 %random% 的生成方式有关。我建议使用模数的原因是,即使 %random% 的微小变化也会导致完全不同的输出。我认为模数不像正确的方法那样随机,但我相信对于小的 %var% 来说应该没关系。无论如何,每次我运行它时,user2035296 和您的代码都会产生相同的数字。如果您可以容忍数字分布稍微不完美,我的代码就可以工作。
  • 我刚刚写了一个批处理文件,在三行中显示%random%;我双击它并得到这个结果:3012 23343 8426。然后我再次运行它并得到这个结果:17735 12172 8635。如果您使用 %random% 没有得到真正随机的结果,则可能是您的系统有问题...
  • 在同一个批处理文件中写入 3 次可以正常工作。当我快速连续运行一个批处理文件 3 次时,问题就出现了。
【解决方案2】:

您不需要在SET /A 命令中将var 括在百分号中;这种形式应该解决所有与块内部/外部正常扩展相关的问题:

SET /A result=%random%*var/32768+1

但是,如果之前的命令在 inside 一个块中,您应该为此更改它(并启用延迟扩展):

SET /A result=!random!*var/32768+1

如果以前的解决方案仍然不起作用,我敢打赌您正在定义一个名为 random 的变量!这可以防止在内部创建 %random% 并始终返回 分配给它的值。

安东尼奥

【讨论】:

    【解决方案3】:

    IMO 您必须在 forif 代码块中使用延迟扩展。

    【讨论】:

    • 它不在 for 或 if 块中,在我将其更改为延迟扩展后它仍然无法正常工作
    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多