Batch file 5位和6位数字之间的批次随机数

Batch file 5位和6位数字之间的批次随机数,batch-file,random,numbers,Batch File,Random,Numbers,简单到获得一个从10000到999999的随机数 我不知道该怎么做,大多数说明都不起作用。 我对批处理相当陌生。虽然可以在批处理文件中使用%RANDOM%来获取随机数,但它将介于0和32767之间 传统的%RANDOM%*n/32767方法无法为n=9999999-10000=989999提供平滑分布。。。它将覆盖整个范围,但会有很大的差距 类似地,您不能同时添加大量对%RANDOM%的调用,因为随机值的总和是 我建议切换到PowerShell 2.0,在那里您可以在整个整数范围内使用。或者用另

简单到获得一个从10000到999999的随机数 我不知道该怎么做,大多数说明都不起作用。
我对批处理相当陌生。

虽然可以在批处理文件中使用
%RANDOM%
来获取随机数,但它将介于0和32767之间

传统的
%RANDOM%*n/32767
方法无法为n=9999999-10000=989999提供平滑分布。。。它将覆盖整个范围,但会有很大的差距

类似地,您不能同时添加大量对
%RANDOM%
的调用,因为随机值的总和是

我建议切换到PowerShell 2.0,在那里您可以在整个整数范围内使用。或者用另一种语言编写一个简单的程序来生成随机数,然后从批处理文件中调用它

编辑:

您可以这样做以获得10000到999999之间的随机数:

set /a rnd=(((%random% * 32768) + %random%) %%990000) + 10000
它不是完全统一的,但对于您的目的来说可能已经足够好了

给定问题标题,可能您实际上在查找100000到999999之间的数字(即5或6位数字)。在这种情况下,您可以使用:

set /a rnd=(((%random% * 32768) + %random%) %%900000) + 100000
与使用加法的方法不同,该方法使用两个随机数(一个用于高阶位,一个用于低阶位),其应在0和1073741823之间提供均匀分布;非均匀性来自于模数(
%%
)操作中得到的环绕。如果使用循环并拒绝任何高于1073700000(=900000*1193)的候选随机值,也可以避免这种情况。

@ECHO Off
::在变量%1中生成线性随机数
::长度为%2位
::maxvalue%3(可选。如果省略,字符串为%2 9)
::最小值%4(可选,如果省略,则为0)
::要设置最小值而不是最大值,请将“”用作%3
SETLOCAL ENABLEDELAYEDEXPANSION
设置$digits=%2
设置$maxval=%~3
设置$minval=%4
如果未定义$digits转到:EOF
如果已定义$maxval转到maxvalset
:maxvallp
设置“$maxval=9%$maxval%”
如果“!$maxval:~%2!”==”转到maxvallp
设置“$maxval=%$maxval:~1%”
:maxvalset
如果未定义$minval SET/a minval=0
:minvallp
设置“$minval=0%$minval%”
如果“!$minval:~%2!”==”转到minvallp
设置“$minval=%$minval:~1%”
:minvalset
设置“$selected=”
设置/a$count=%2
:getdigit
设置/a$位=%RANDOM%
如果%$digit%gtr 32759转到getdigit
设置/a$digit=%$digit:~-1%
设置“$selected=%$selected%%$digit%”
设置/a$count-=1
如果%$count%gtr 0转到getdigit
如果“%$SELECTED%”全球技术法规“%$maxval%”转到minvalset
如果“%$SELECTED%”lss“%$minval%”转到minvalset
:slzlp
如果%$selected:~0,1%==0如果%$selected%neq 0设置“$selected=%$selected:~1%”并转到slzlp
endlocal设置“%1=%%$selected%”(&S)
后藤:EOF
下面是一个例程,它将生成任意长度的线性分布的随机数,最大值和最小值

它的使用需要用户的一些智能。当然-要求一个介于0和99之间的数字,然后添加1比要求一个介于1和100之间的数字要快得多。它也不是防弹的,并且假设提供它的参数是有效的


每一步都很简单——变量名和标签应该为它们的用途提供适当的线索。本质上,一个长度合适的随机数字串被构建,如果超出范围则被丢弃。选择幻数
32759
是为了确保作为生成数字的基础选择的随机数为0..32759,这将产生一个线性分布mod 10,假设随机数生成器是线性的。

这是当你看到它是如何完成的时,你会自责的事情之一。具体来说,您已经尝试了哪些代码?你可能真的很接近。这会创建一个平滑分布在10000和999563之间的随机数:
set/a%random%*%random%/1085+10000
@Aacini这不是一个平滑分布。你的“答案”的结论是这不能在批处理文件中完成?你可以在评论中这样说。。。