批量生成随机数的随机数

时间:2013-12-23 17:43:35

标签: batch-file random

作为我正在制作的计划的一部分,我希望能够在网格上“绘制”或“标记”随机点。在这样做时,我需要生成一个随机数(x)来确定绘图的数量 - 然后生成x代表坐标的不同随机数。目前我有以下代码:

@echo off
:obno
set /a r1=%random%
if %r1% gtr 10 goto obno else (
goto ob
)

:ob
for /L %%R in (1,1,%r1%) do set /a n%%R=%random%*240/32678+1
echo %r1%
echo %n1% %n2% %n3% %n4% %n5% %n6% %n7% %n8% %n9% %n10%
pause

这里发生的是我最终得到x相同的随机数而不是不同的

即。输出中:

5
108 108 108 108 108 

所以任何帮助都将不胜感激!

4 个答案:

答案 0 :(得分:1)

在一个循环中你应该使用延迟扩展,例如

SETLOCAL ENABLEDELAYEDEXPANSION and using !RANDOM! instead of %RANDOM%  

和...

%RANDOM% gives you a random number between 0 and 32767.  

使用下面的表达式,您可以将范围更改为您喜欢的任何内容(此处范围为[1 ... 100]而不是[0 ... 32767])。

SET /A test=%RANDOM% * 100 / 32768 + 1

以下将产生1~100之间的数字

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

要在命令行上获取0到9之间的随机数,请使用

set /a "rand=%random% % 10"

如果在批处理文件中使用,则将模数运算符加倍

set /a "rand=%random% %% 10"

答案 1 :(得分:1)

使用您的代码,您可以使用call并将%加倍%%random%%

@echo off
:obno
set /a r1=%random%
if %r1% gtr 10 goto obno else (
goto ob
)

:ob
for /L %%R in (1,1,%r1%) do call set /a n%%R=%%random%%*240/32678+1
echo %r1%
echo %n1% %n2% %n3% %n4% %n5% %n6% %n7% %n8% %n9% %n10%
pause

答案 2 :(得分:0)

以下是在批处理文件中生成随机数的类似帖子

您需要在批处理文件的开头包含以下内容

 setlocal EnableDelayedExpansion

Random variable not changing in "for" loop in windows batch file

答案 3 :(得分:0)

@ECHO OFF
SETLOCAL
:obno
set /a r1=%RANDOM% %% 10 + 1

:ob
for /L %%R in (1,1,%r1%) do CALL set /a n%%R=%%random%% %%%% 240 + 1
echo %r1%
echo %n1% %n2% %n3% %n4% %n5% %n6% %n7% %n8% %n9% %n10%
GOTO :EOF

由于%random%产生一个随机数0..32767,原始代码将浪费大量时间等待0到10之间的数字。此外,它可能会生成0。

%运算符用于'模数'。在批处理中,您需要将其加倍,因此%random% %% 10生成0..9

通过CALL命令,您可以避免setlocal enabledelayedexpansion的需要,但您还需要加倍使用的任何%,因此random加倍并翻两倍对于mod运算符。

setlocal不是严格必要的,但它的作用是在批次结束时退出环境变化,因此r1,n1..n10在环境中根本不存在批次完成后。如果 OMIT setlocal,那么在一次运行中设置的任何变量将为后续运行设置 REMAIN ,因此如果您的第一次运行设置为n5(因此也是n1 ..n4)然后,如果第二次运行设置r1 = 2,则n3..n5将显示上次运行的陈旧数据。

最后,如果你允许r1 = 0,那么由于没有设置n1..n10,echo %n1%...命令将被解析为echo,将显示echo状态(回声开/关)。这可以通过使用语法echo(%n1%...来克服。直接跟在O之后的角色被发现做了一些奇怪的事情 例如,echo Dot 对于blak换行是传统的。 (可能看起来很奇怪并且看起来“不平衡”嵌套,但是很高兴能够生成一个带有空参数的换行符。