gpt4 book ai didi

windows - %RANDOM% 每次执行返回相同的输出

转载 作者:可可西里 更新时间:2023-11-01 10:19:18 25 4
gpt4 key购买 nike

以下脚本:

@echo off
setlocal EnableDelayedExpansion
set n=0
for /R %%f in (./*.avi;./*.mp4) do (
set /A n+=1
set "file[!n!]=%%f"
)
set /A "rand=(n*%random%)/32768+1"
ECHO %rand%
ECHO "!file[%rand%]!"
endlocal
PAUSE

返回相同的随机数,因此每次执行都会归档。请您提出一个解决方案,并详细说明问题发生的原因。

谢谢

最佳答案

cmd 使用的 PRNG 使用当前时间初始化,分辨率为一秒,每个 cmd 实例一次(此行为已公开 here )。在同一秒内启动的两个单独的 cmd 实例将生成相同的伪随机序列。

但在同一 cmd 实例中连续执行相同或不同的批处理文件将检索不同的(或不是随机的)“随机”序列。

在第一种情况下,在相同或接近几秒的时间启动单独的实例,您可以获得问题中公开的指示行为,但问题会因代码中的算术而增加。

如果每次执行的 n 相同或相似,并且 %random% 返回的值接近上一次执行返回的值(如您所述),则n*%random% 将返回接近上一次执行的结果。除以 32768,任何差异都将被舍弃,您最终会得到相同的所选文件。

在这种情况下,最好使用模运算符。作为除法的余数,更容易从起始随机值略有不同得到不同的结果

set /a "rand=%random% %% n + 1"

关于windows - %RANDOM% 每次执行返回相同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33334367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com