【发布时间】:2012-06-11 10:09:19
【问题描述】:
正如标题所说,我正在尝试从一个文件夹中选择最多四个随机文件(壁纸),以进行进一步处理。该文件夹不包含子文件夹,仅包含 *.jpg、*.bmp 和 *.png(它可能包含 Thumbs.db 文件,但我已经处理好了)。
我使用for 循环读取所有文件,制作类似于数组的内容,然后我想运行另一个for 循环来制作将充当索引的随机数以选择文件。
setlocal enabledelayedexpansion
set "wps=1 2 3 4"
set /a ind = 0
for /f "tokens=* delims=" %%g in ('dir C:\Wallpapers /a:-h-s /b /s') do (
set /a ind += 1
set "!ind!=%%g"
)
for %%g in (%wps%) do (
set /a "num = (((!random! & 1) * 1073741824) + (!random! * 32768) + !random!) %% %ind% + 1"
echo Wallpaper %%g is #!num! - Title: "!!num!!"
)
当然,回显的行只是输出Wallpaper 1 is #118 - Title: "118" 而不是Wallpaper 1 is #118 - Title: "C:\Wallpapers\Miami Skyline.jpg"。
所以我的具体问题是:如何在 for 循环内双重展开变量?
[注意 #1:创建随机数的行需要很长,因为它提供了良好的随机值分布]
[注意 #2:我需要 wps 以这种方式存储,因为有时我可能只需要三张壁纸,不一定按数字顺序]
【问题讨论】:
标签: random batch-file for-loop variable-expansion delayedvariableexpansion