如何在批处理文件中生成4位数的随机数?

时间:2016-04-08 15:24:02

标签: batch-file windows-console

请给我在dos(批处理)文件中生成4位数随机数的代码

我试过

set /a num=%random% %%10000 +1

但这并不是每次都给出4位数字。所以请帮助我。

4 个答案:

答案 0 :(得分:4)

只是为了增加另一种可能性:

echo %random:~-1%%random:~-1%%random:~-1%%random:~-1%

(取四个randoms的最后一位数字)

答案 1 :(得分:1)

您不会说您是否需要在整个范围内保持一致性,或者您只想要一个快速的4位数字来表示文件名。

一种超级快捷方式是将您的范围限制为1000-9999

set /a num = %random% %% 9000 + 1000

如果你想要0000-9999的全范围,你可以取一个更大的数字并截断以获得最后四位数,但只有在保证你至少有四位数后才能获得。为此,请在截断前将数字加1000.

set /a num = %random% + 1000
set num=%num:~-4%

这仍然存在均匀性问题。由于0000-2767生成数字的方式,2768-9999之间的数字比%random%之间的数字显示频率高出约33%。

减少此错误(但不能消除它)的一种方法是将多个%random%个调用的结果放在一起。

set num=%random:~-1%%random:~-1%%random:~-1%%random:~-1%

在这种情况下,数字0-7仍然比8-9的可能性高0.1%左右,这对大多数事情来说已经足够了。

但是,如果你想完全删除错误,你可以通过循环来完成。

:rndloop
set /a num = %random% + 1000
if %num% GEQ 31000 goto :rndloop
set num=%num:~-4%

此循环将始终为您提供0000和9999之间的均匀分布。

感谢@aschipfl,@ Manuel,@ Stephan和@Magoo,感谢他们在这里借来的部分答案。

答案 2 :(得分:0)

试试这个:

set random_number=%random:~-4%

这将生成一个4位数的随机数

答案 3 :(得分:0)

粗略地,

:rndloop
set /a random_number=%random%+10000
if %random_number% geq 40000 goto rndloop
set "random_number=%random_number:~-4%"
echo %random_number%

如果您确实需要0..9999范围内的随机数,请尝试

:rndloop
set /a random_number=%random%
if %random_number% geq 30000 goto rndloop
set /a random_number=random_number/3
echo %random_number%

假设%random%在0到32767之间是线性的,那么必须取消大于29999的数字,因为使用它们会偏向分布:

对于%random%= 800或10800或20800(3种可能),将生成

800 将为%random%= 200或10200或20200或30200(4种可能)生成200