如何在不基于系统时钟的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

如果多线程是你唯一的问题,这应该可行。