Batch file 随机文件选择器在每次执行(批处理)时拾取相同的值

Batch file 随机文件选择器在每次执行(批处理)时拾取相同的值,batch-file,random,emulation,picker,Batch File,Random,Emulation,Picker,我试图通过一个脚本用这个软件启动一个随机文件-唯一的问题是这个脚本总是在每次启动时选择相同的随机数。对我来说永远是41。。。有什么建议吗 @echo on setlocal EnableDelayedExpansion cd C:\Users\User\Documents\Downloads\Nintendo set n=0 for %%f in (*.*) do ( set /A n+=1 set "file[!n!]=%%f" ) set /A "rand=%random% *

我试图通过一个脚本用这个软件启动一个随机文件-唯一的问题是这个脚本总是在每次启动时选择相同的随机数。对我来说永远是41。。。有什么建议吗

@echo on
setlocal EnableDelayedExpansion
cd C:\Users\User\Documents\Downloads\Nintendo
set n=0
for %%f in (*.*) do (
   set /A n+=1
   set "file[!n!]=%%f"
)
set /A "rand=%random% * 100 / 32768+1"
"C:\Users\User\Downloads\fceux-2.2.2-win32\fceux.exe" "!file[%rand%]!"
这对我很有用:

@echo off
setlocal enabledelayedexpansion
c:
cd \windows

for %%f in (*.*) do (
   set /A n+=1
   set "file[!n!]=%%f"
)

rem change random seed value
for /l %%i in (0,1,%time:~-2%) do set /A tmp=!random!

set /A rand=!random! %% n-1
echo "!file[%rand%]!"

事实上,这个问题比最初想象的更令人困惑。每当我运行此脚本时,我都会得到相同的“!file[%rand%]!”值,但仅在一定时间内。假设我运行脚本,我得到63-它打开并完美地执行。我关闭窗口,15秒后再次运行脚本,我再次得到63。大概过了一分钟左右,我运行脚本,得到64或65。。。脚本的每次执行都不会给我一个随机数,但实际上是可以预测的,这取决于自上次执行以来经过了多少时间。。。我遗漏了什么?1)DOS算法的精度很低,所以不要乘法/然后/除法,只需除以327或更好,按照这里描述的方法进行:或这里:你会得到更好的结果;2) 执行批处理文件时,会根据系统时间进行一些种子初始化,因此它将生成相同的数字,直到时间发生变化(秒数)。我测试了%time%变量,发现最后2个字符是秒的小数部分,因此可以更频繁地使用它更改随机生成器种子值(每秒100次,而不是1次),所以我更新了我的答案…我的fs中没有下载\Nintendo dir,所以我使用c:\windows进行测试,现在每次运行时它都会显示一个新的文件名非常有用!非常感谢你的帮助kay!你的答案一针见血。