如何在不基于系统时钟的CMD中生成随机数
how to Generate a random number in CMD that is not based on system clock
我想在批处理文件中创建一个不基于系统时钟时间的随机数。
我一直在尝试使用 %RANDOM%
,但它不能很好地满足我的需要。
原因是我想将在多个线程中接收到的文件名写入文件,当我使用系统时间 %RANDOM%
方法时,文件之间会发生冲突,因为系统时间基于秒而不是毫秒。
所以我需要一种方法来根据系统时间以外的其他因素生成随机数...
如果您有线程,则添加一个随机生成器线程,根据需要向其他线程提供随机数。在该线程中有一个 RNG 运行,它只从时钟初始化一次。其他线程调用随机生成器线程以获取序列中的下一个随机数。
时钟只在随机线程启动时使用一次,所以只要随机线程运行超过一秒,应该不会出现时间冲突的问题。
如有必要,其他线程可以使用它们的单个随机数为它们自己的 RNG 播种以生成更多数字。
如果问题是您的 运行 多个线程,您能否为每个批处理文件为每个不同的线程(例如 id
)提供一个 'unique ID' 变量并将其附加到%random%
的结尾为每个生成不同的数字。例如:
::: Call your batch files with a unique parameter for each thread (e.g. "prog.bat 1")
set id=%%1
::: Alternatively if you're starting each thread at a different time:
:: set id=%random%
:: Later in the batch file when you're writing a file
echo %random%%id%
:: ^ a unique random number for each thread
如果多线程是你唯一的问题,这应该可行。
我想在批处理文件中创建一个不基于系统时钟时间的随机数。
我一直在尝试使用 %RANDOM%
,但它不能很好地满足我的需要。
原因是我想将在多个线程中接收到的文件名写入文件,当我使用系统时间 %RANDOM%
方法时,文件之间会发生冲突,因为系统时间基于秒而不是毫秒。
所以我需要一种方法来根据系统时间以外的其他因素生成随机数...
如果您有线程,则添加一个随机生成器线程,根据需要向其他线程提供随机数。在该线程中有一个 RNG 运行,它只从时钟初始化一次。其他线程调用随机生成器线程以获取序列中的下一个随机数。
时钟只在随机线程启动时使用一次,所以只要随机线程运行超过一秒,应该不会出现时间冲突的问题。
如有必要,其他线程可以使用它们的单个随机数为它们自己的 RNG 播种以生成更多数字。
如果问题是您的 运行 多个线程,您能否为每个批处理文件为每个不同的线程(例如 id
)提供一个 'unique ID' 变量并将其附加到%random%
的结尾为每个生成不同的数字。例如:
::: Call your batch files with a unique parameter for each thread (e.g. "prog.bat 1")
set id=%%1
::: Alternatively if you're starting each thread at a different time:
:: set id=%random%
:: Later in the batch file when you're writing a file
echo %random%%id%
:: ^ a unique random number for each thread
如果多线程是你唯一的问题,这应该可行。