我只是尝试从定义的数组中访问随机元素:
@set DIRs[0]="%APPDATA%"
@set DIRs[1]="%APPDATA%\testapp"
@set DIRs[2]="%APPDATA%\testapp2"
@set /a _rand=(%RANDOM% * 2 /32768)+1
echo %_rand%
echo !DIRs[%%_rand]!
我猜这个随机生成器(它始终打印2
)而最后一行都是错误的。
答案 0 :(得分:3)
它的
echo !DIRs[%_rand%]!
(假设您有setlocal enabledelayedexpansion
)
如果您需要在没有延迟扩展的情况下执行此操作,请使用此技巧获得另一层解析:
call echo %%DIRs[%_rand%]%%
答案 1 :(得分:1)
Stephan关于访问数组索引的语法是正确的。
随机数始终为2的原因是,当使用CMD时,随机函数的种子由脚本的执行时间定义。来自ss64.com:
随机数与伪随机数
伪随机序列不是真正随机的,而是由一小组初始值(状态)决定的,初始种子通常基于时钟时间。在CMD%RANDOM%的情况下,种子基于CMD会话开始时的时钟时间。运行批处理文件时可能会出现问题,如果脚本在调用%RANDOM%之前总是花费大约相同的时间运行,则返回的数字将始终位于可预测的小范围内。