2013-03-22 36 views
0

我想在1和一个变量之间做一个随机数,每次程序运行时这个变量都会改变。我用这至今: SET/A的结果=%随机%*%VAR%/ 32768 + 1随机数公式返回相同数字的批次

,但每次我重新运行,将会返回相同数量的批处理文件,做的人都知道是怎么回事?

由于提前

+0

你应该添加一个标签为您所使用的语言。 – Ladlestein 2013-03-22 21:51:03

回答

0

试试这个:

set /a result=(%random% %% %var%) + 1 
+0

在我的系统上%random%随着时间增加,因此不是特别随机的。如果您每次运行都会得到非常不同的结果,那么使用模数将产生更多随机的结果。 – cgimusic 2013-03-22 22:23:28

+0

编号'%random%'具有通过'%random%* var/32768'保存的特定分布。 Modulo运算符改变这个分布并创建一个与原始“不那么随机”的不同的分布。 – Aacini 2013-03-23 00:16:51

+0

当我在一个批处理文件中使用%random%并运行它两次或三次时,我每次只得到一个稍高的数字。我猜测这是如何产生%random%的。我建议使用模数的原因是即使%random%的小变化都会导致完全不同的输出。我认为模数不像正确的方法那样随机,但我相信对于小的%var%来说应该没有关系。 在任何情况下,user2035296和您的代码每次运行时都会生成相同的编号。我的代码工程提供您可以容忍一个稍微不完美的数字分布。 – cgimusic 2013-03-23 00:27:59

0

IMO你必须使用延迟扩展在forif代码块。

+0

它不在for或for块中,并且在我将其更改为延迟扩展后,它仍然不起作用 – user2035296 2013-03-22 21:58:48

+0

您的代码在此处起作用,因此请在脚本中显示更多内容。 – Endoro 2013-03-22 22:04:03

1

你不需要附上var在百分号在SET /A命令;这种形式的应解决与正常扩张内/块之外的所有问题:

SET /A result=%random%*var/32768+1 

然而,如果前面的命令是内部一个块,则应该改变它为这一个(并启用延迟扩展):

SET /A result=!random!*var/32768+1 

如果以前的解决方案仍然无效,我敢打赌,您正在定义一个名为random的变量!这可以防止在内部创建%random%并始终返回分配给它的值。

安东尼