随机访问数组元素

时间:2017-12-23 20:32:06

标签: batch-file

我只是尝试从定义的数组中访问随机元素:

@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)而最后一行都是错误的。

2 个答案:

答案 0 :(得分:3)

它的

echo !DIRs[%_rand%]!

(假设您有setlocal enabledelayedexpansion

如果您需要在没有延迟扩展的情况下执行此操作,请使用此技巧获得另一层解析:

call echo %%DIRs[%_rand%]%%

答案 1 :(得分:1)

Stephan关于访问数组索引的语法是正确的。

随机数始终为2的原因是,当使用CMD时,随机函数的种子由脚本的执行时间定义。来自ss64.com:

  

随机数与伪随机数

     

伪随机序列不是真正随机的,而是由一小组初始值(状态)决定的,初始种子通常基于时钟时间。在CMD%RANDOM%的情况下,种子基于CMD会话开始时的时钟时间。运行批处理文件时可能会出现问题,如果脚本在调用%RANDOM%之前总是花费大约相同的时间运行,则返回的数字将始终位于可预测的小范围内。

来源:https://ss64.com/nt/syntax-random.html