Random 批量随机数

Random 批量随机数,random,batch-file,Random,Batch File,我正在尝试创建一个组成随机DOB的批处理文件 @echo off title Random DOB Generator! echo Working... echo. :loop set dd=%random% if "%dd%" GTR 31 goto loop if "%dd%" LSS 1 goto loop :loop2 echo %dd%/??/???? echo. :loop2a set mm=%random% if "%mm%" GTR 12 goto loop2a if "%mm%

我正在尝试创建一个组成随机DOB的批处理文件

@echo off
title Random DOB Generator!
echo Working...
echo.
:loop
set dd=%random%
if "%dd%" GTR 31 goto loop
if "%dd%" LSS 1 goto loop
:loop2
echo %dd%/??/????
echo.
:loop2a
set mm=%random%
if "%mm%" GTR 12 goto loop2a
if "%mm%" LSS 1 goto loop2a
:loop3
echo %dd%/%mm%/????
echo.
:loop3a
set yyyy=%random%
if "%yyyy%" GTR 2000 goto loop3a
if "%yyyy%" LSS 1900 goto loop3a
:win
echo.
echo Result: %dd%/%mm%/%yyyy%
pause > nul
exit
但它什么也没做,只是坐在那里。我做错了什么


谢谢你的帮助

问题在于如何生成随机数

%random%
返回一个介于0和32767之间的数字,因此尝试生成一个介于1和31、1和12以及1900和2000之间的数字需要一些时间

它并不是什么都不做,只是花了很长时间才找到匹配的号码,看起来就像那样

你可以用一点数学来找出一个在一定范围内的数字,这样你就不必等待了

@echo off
title Random DOB Generator!
echo Working...
echo.
set /a dd=%random% * 31 / 32768 + 1
echo %dd%/??/????
echo.
set /a mm=%random% * 12 / 32768 + 1
echo %dd%/%mm%/????
echo.
set /a yyyy=%random% * (2000 - 1900 + 1) / 32768 + 1900
echo.
echo Result: %dd%/%mm%/%yyyy%
pause >nul
exit

如果您从原始脚本中删除了
@echo off
,我想您会看到它生成了多少个数字来查找匹配:)

您还可以将模运算与模运算符
%
一起使用。这样就不需要指定最大随机值
32768
。只需指定所需的最大值
31
,这将返回
1到31
<代码>:)
设置/a值=(%Random%%31)+1
要使用自定义的最小值和最大值范围,请使用以下设置
set/a值=(%Random%%(2000-1900))+(1900+1)
或为简单起见
set/a值=(%Random%%100)+1901
否。由%Random%返回的数字(假定)在0-32767范围内均匀分布。当您将其除以32768并乘以所需范围时,新数字在新范围内具有相同的分布。任意数的%random%模有一个未知的分布,但它当然比原来的更糟。这意味着你会更频繁地得到重复的数字。