Batch file 第一次输出相同的批处理随机函数 在我的批处理程序中,我在中间有一行: set /a scramble=%random%

Batch file 第一次输出相同的批处理随机函数 在我的批处理程序中,我在中间有一行: set /a scramble=%random%,batch-file,random,random-seed,Batch File,Random,Random Seed,这里的问题是,每次我打开批处理文件时,它都会给我相同的输出,例如我打开它,它将%scramble%设置为17534,下次我打开它时,它非常相似,例如17546,少量增加。如果我循环它,那么只有第一个随机数是相似的,其余的都是随机的 例如,我第一次运行它时,它会给出以下数字列表: 2348636454854 第二次 234982637417322 因此,只有第一个是相似的 一个简单的解决方法是将echo%random%放在批处理的开头,然后将cls放在批处理的开头,所以这对我来说不是问题,但我只是

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

例如,我第一次运行它时,它会给出以下数字列表:

2348636454854

第二次

234982637417322

因此,只有第一个是相似的


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

cmd中的随机数生成器使用当前时间(具有第二分辨率)来为prng种子。此初始化在每个
cmd
实例中执行一次

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

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


可以找到更多信息

“但是如果在同一个cmd实例中多次启动批处理文件,则序列不会如此相似,因为初始化只执行一次。”-我不理解您的观点,尤其是因为您知道,如果多个批处理过程在同一秒内启动,它们都会得到相同的“随机”序列我把你的句子理解为相反的意思。@dbenham,拿这个
x.cmd
批处理文件
@echo%random%
。现在,从命令行为(110)中的/l%a执行
,执行@start/b cmd/c x.cmd
,然后为(110)中的/l%a执行
,执行@call x.cmd
。PRNG在每个
cmd
过程中初始化一次,而不是在批处理文件执行时初始化一次。同一cmd实例中的