批量随机函数给出相同的第一个输出
Batch random function giving same first output
在我的批处理程序中,中间有这一行:
set /a scramble=%random%
这里的问题是每次我打开批处理文件时,它都会给我相同的输出,例如我打开它并将 %scramble% 设置为 17534,下次我打开它时,它非常相似,例如17546,少量增加。如果我循环它,那么只有第一个随机数相似,其余都是随机的。
例如我第一次 运行 它给了我这个数字列表:
23486,32645,4854
第二次给
23498,26374,17322
所以只有第一个相似。
一个简单的解决方法是将 echo %random%
然后 cls
放在批处理的开头,所以这对我来说不是问题,但我只是想知道这是为什么?
cmd 中的随机数生成器使用当前时间(具有秒分辨率)为 prng 播种。每个 cmd
个实例进行一次此初始化。
因此,如果您每次都将 运行 批处理文件放在新的 cmd
实例中,则每种情况下的种子都非常相似。
但是,如果您在同一个 cmd
实例中多次启动批处理文件,序列将不会如此相似,因为初始化仅完成一次。
可以找到更多信息here
在我的批处理程序中,中间有这一行:
set /a scramble=%random%
这里的问题是每次我打开批处理文件时,它都会给我相同的输出,例如我打开它并将 %scramble% 设置为 17534,下次我打开它时,它非常相似,例如17546,少量增加。如果我循环它,那么只有第一个随机数相似,其余都是随机的。
例如我第一次 运行 它给了我这个数字列表:
23486,32645,4854
第二次给
23498,26374,17322
所以只有第一个相似。
一个简单的解决方法是将 echo %random%
然后 cls
放在批处理的开头,所以这对我来说不是问题,但我只是想知道这是为什么?
cmd 中的随机数生成器使用当前时间(具有秒分辨率)为 prng 播种。每个 cmd
个实例进行一次此初始化。
因此,如果您每次都将 运行 批处理文件放在新的 cmd
实例中,则每种情况下的种子都非常相似。
但是,如果您在同一个 cmd
实例中多次启动批处理文件,序列将不会如此相似,因为初始化仅完成一次。
可以找到更多信息here