【发布时间】:2019-06-03 22:48:09
【问题描述】:
试图生成一个随机数并将其用于 Windows 批处理脚本文件中的变量值。也许我错过了一些非常基本的东西,但有些东西对我不起作用。
创建了一个名为random_test.bat 的批处理文件,内容如下。
SET rnumber=%random%
echo %random%
pause
连续运行该文件 3 次会产生以下一组输出:
一个
C:\Users\user\Desktop>SET rnumber=28955
C:\Users\user\Desktop>echo 20160
20160
C:\Users\user\Desktop>pause
Press any key to continue . . .
两个
C:\Users\user\Desktop>SET rnumber=29072
C:\Users\user\Desktop>echo 13887
13887
C:\Users\user\Desktop>pause
Press any key to continue . . .
三个
C:\Users\user\Desktop>SET rnumber=29183
C:\Users\user\Desktop>echo 18885
18885
C:\Users\user\Desktop>pause
Press any key to continue . . .
如您所见,命令 echo %random% 会按预期不断生成介于 0 和 32,767 之间的相对随机数。
同时使用%random% 为变量rnumber 设置值不会。它产生一个不那么随机的数字(可能也在 0 到 32,767 之间),但它不是随机的。如果我现在猜测,它似乎在 0 到 32,767 的方向上缓慢增长。
为了澄清脚本在每次执行时都会在第 2 行生成一个随机数(20160、13887、18885...),但第 1 行似乎会生成一个随着批处理文件的每次执行而不断增加的数字(28955、 29072、29183 等在我的多次测试中)。
我已经在两台不同的计算机上试过了,分别是 Windows 7 x64 和 Windows 2012 R2,连续多次运行这个 3 行脚本。
接下来要尝试的是来自完全不同网络的计算机,我想知道这是否与域策略、网络、软件有关..
这是怎么回事?
更新:
当从同一个 CMD 窗口按顺序运行命令时,它按预期工作,但在多次执行同一个批处理文件时却没有。
- 脚本
echo %random%中的行按预期工作。 -
SET rnumber=%random%行没有。
(多次执行同一个脚本时)
【问题讨论】:
-
好吧,你认为什么是“足够随机的”?你多久尝试一次??
-
known behavior - 确实很烦人。
-
@SomethingDark:当您启动一个新的
cmd进程时,随机数生成器使用%time%进行初始化。您在同一个窗口(=进程)中运行所有测试,因此之间没有重新初始化。双击您的test.bat几次(在同一秒内),您应该能够复制该问题。 (不要忘记添加pause以保持窗口打开) -
哦,对了,有些人通过双击来运行脚本...
-
@SomethingDark:是的——我也无法适应这个概念......
标签: batch-file random cmd