【问题标题】:Batch random function giving same first output批量随机函数给出相同的第一个输出
【发布时间】:2015-03-08 22:26:41
【问题描述】:

在我的批处理程序中,我的中间有这行:

set /a scramble=%random%

这里的问题是每次我打开批处理文件时,它给我的输出都是一样的,例如我打开它并将%scramble%设置为17534,下次我打开它时,它非常相似,例如17546,小幅增加。如果我循环它,那么只有第一个随机数是相似的,其余的都是随机的。

例如,我第一次运行它时,它给了我这个数字列表:

23486,32645,4854

第二次给予

23498,26374,17322

所以只有第一个是相似的。

一个简单的解决方法是将echo %random% 然后cls 放在批处理的开头,所以这对我来说不是问题,但我只是想知道这是为什么?

【问题讨论】:

    标签: batch-file random random-seed


    【解决方案1】:

    cmd 中的随机数生成器使用当前时间(以秒分辨率)为 prng 播种。每个cmd 实例都会进行一次初始化。

    因此,如果您每次都在新的cmd 实例中运行批处理文件,则种子在每种情况下都非常相似。

    但是,如果您在同一个 cmd 实例中多次启动批处理文件,则序列不会如此相似,因为初始化只进行了一次。

    更多信息可以找到here

    【讨论】:

    • “但是如果你在同一个 cmd 实例中多次启动你的批处理文件,序列将不会那么相似,因为初始化只进行了一次。” - 我不知道'不明白你的意思,特别是因为你知道如果几个批处理过程在同一秒内开始,它们每个都会得到相同的“随机”序列。我将您的句子解释为相反的意思。
    • @dbenham,拿这个x.cmd批处理文件@echo %random%。现在,从命令行执行for /l %a in (1 1 10) do @start /b cmd /c x.cmd,然后执行for /l %a in (1 1 10) do @call x.cmd。每个 cmd 进程 初始化一次 PRNG,而不是每个批处理文件执行。 在同一个 cmd 实例中会有所不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2013-04-21
    相关资源
    最近更新 更多