【发布时间】:2013-03-12 21:41:29
【问题描述】:
我试图在 1 和一个变量之间创建一个随机数,每次程序运行时这个变量都会改变。到目前为止我正在使用这个: SET /A 结果=%random%*%var%/32768+1
但是每次我重新运行批处理文件时,它都会返回相同的数字,人们知道发生了什么吗?
提前致谢
【问题讨论】:
-
你应该为你使用的语言添加一个标签。
标签: random batch-file cmd
我试图在 1 和一个变量之间创建一个随机数,每次程序运行时这个变量都会改变。到目前为止我正在使用这个: SET /A 结果=%random%*%var%/32768+1
但是每次我重新运行批处理文件时,它都会返回相同的数字,人们知道发生了什么吗?
提前致谢
【问题讨论】:
标签: random batch-file cmd
试试这个:
set /a result=(%random% %% %var%) + 1
【讨论】:
%random% 具有通过%random%*var/32768 保留的特定分布。模算子改变了这个分布,并创建了一个比原来“更少随机”的不同的分布。
%random%;我双击它并得到这个结果:3012 23343 8426。然后我再次运行它并得到这个结果:17735 12172 8635。如果您使用 %random% 没有得到真正随机的结果,则可能是您的系统有问题...
您不需要在SET /A 命令中将var 括在百分号中;这种形式应该解决所有与块内部/外部正常扩展相关的问题:
SET /A result=%random%*var/32768+1
但是,如果之前的命令在 inside 一个块中,您应该为此更改它(并启用延迟扩展):
SET /A result=!random!*var/32768+1
如果以前的解决方案仍然不起作用,我敢打赌您正在定义一个名为 random 的变量!这可以防止在内部创建 %random% 并始终返回 您 分配给它的值。
安东尼奥
【讨论】:
IMO 您必须在 for 或 if 代码块中使用延迟扩展。
【讨论】: