双击批处理脚本的随机奇怪行为

Weird behaviour of random with double click on batch script

我现在很迷茫,想了解一下到底是怎么回事。

我正在尝试编写一个批处理脚本,当我双击该图标时,它会启动一个随机的网络浏览器。很简单。

这是我的第一次尝试:

set /a var=%random% %%7 + 1

if %var%==1 (start "brave" "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe")
if %var%==2 (start "chrome" "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")
if %var%==3 (start "edge" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")
if %var%==4 (start "firefox" "C:\Program Files\Mozilla Firefox\firefox.exe")
if %var%==5 (start "libreWolf" "C:\Program Files\LibreWolf\librewolf.exe")
if %var%==6 (start "opera" "C:\Program Files\Opera\opera.exe")
if %var%==7 (start "vivaldi" "C:\Program Files\Vivaldi\Application\vivaldi.exe")

这很完美,没有什么可抱怨的。

现在,我想让我的随机选择更干净一点,所以我这样做了:

set /a minval=1
set /a maxval=7
set /a var=%RANDOM% * (%maxval% - %minval% + 1) / 32768 + %minval%

这就是奇怪的事情发生的地方。

当我双击该图标时,它不断打开同一个浏览器(意思是,我验证过,var 始终具有相同的值)。但是当我从 cmd 启动脚本时,它像以前一样完美运行

这是怎么回事?!第一次尝试怎么行,第二次不行?为什么它在命令行而不是鼠标输入下工作?

随机数生成器的种子是当前时间。

如果你打开echo,你会发现生成的“随机”数字变化缓慢。

当您通过单击开始您的批次时,将创建一个新过程并且 %random% 返回的第一个值似乎是种子,因此当您应用您的公式时,计算值将在一段时间内保持不变大量时间。使用mod,数值变化会更快。

如果你运行多次从提示中得到同一批次,随机种子属于交互式cmd会话,所以种子不是re-initialised下一个运行.

此方案的一个结果是,如果使用 random 的批处理在一天的同一时间执行(如通过任务调度程序),则将生成相同的数字序列。