以数组编号为变量返回循环内数组的内容
Posted
技术标签:
【中文标题】以数组编号为变量返回循环内数组的内容【英文标题】:Return Contents of Array Inside Loop with Array Number as Variable 【发布时间】:2021-11-05 15:31:00 【问题描述】:我花了 2 多个小时来解决这个问题,但我仍然不明白它是如何工作的。
此代码假设遍历当前脚本文件夹中的所有 PNG 并放入 folder1 数组。
然后我需要在循环中随机生成数字,并从数组中随机挑选照片并返回照片文件名。
提前致谢。
echo
cls
setlocal enableDelayedExpansion
set /a photos=1
for %%G in (*.png) do (set folder1[!photos!]=%%~G
set /a photos+=1 )
set totaloutput=2
for /l %%x in (1, 1, %totaloutput%) do (
set /a "_rand=(%RANDOM% * 20 /32768)+1"
echo _rand is !_rand1!
echo folder1 is "!folder1[%%_rand]!"
echo folder1 is "!folder1[%_rand%]!"
echo folder1 is %folder1[!_rand!]%
)
最终代码:
echo off
cls
setlocal enableDelayedExpansion
set /a photos=1
for %%G in (*.png) do (
set folder1[!photos!]=%%~G
set /a photos+=1 )
set totaloutput=10
for /l %%x in (1, 1, %totaloutput%) do (
set /a "_rand=(!RANDOM! * (%photos%-1) /32768)+1"
echo _rand is !_rand!
FOR %%G IN ("!_rand!") DO echo folder1 is "!folder1[%%~G]!"
)
输出样本:
_rand is 2
folder1 is "b2.png"
_rand is 6
folder1 is "b6.png"
_rand is 3
folder1 is "b3.png"
_rand is 3
folder1 is "b3.png"
_rand is 5
folder1 is "b5.png"
_rand is 6
folder1 is "b6.png"
_rand is 2
folder1 is "b2.png"
_rand is 3
folder1 is "b3.png"
_rand is 3
folder1 is "b3.png"
_rand is 6
folder1 is "b6.png"
【问题讨论】:
见Arrays, linked lists and other data structures in cmd.exe (batch) script 【参考方案1】:您的代码有几个问题。
您需要对RANDOM
变量使用延迟扩展。除非您这样做,否则输出的每次迭代都将是相同的。随机计算还应该使用您的文件数,否则您将被限制为现有代码中的前 20 个文件。所以那行应该改成这个。
set /a "_rand=(!RANDOM! * %photos% /32768)+1"
因为你在一个带括号的代码块内,你基本上需要做两层扩展来获得数组的值。您有两种选择。
调用方法
CALL echo folder1 is "%%folder1[!_rand!]%%"
FOR 元变量。
FOR %%G IN ("!_rand!") DO echo folder1 is "!folder1[%%~G]!"
编辑: 您的代码中还有一个错误。如果目录中有一个文件,您的文件数将为两个。在创建数组变量之前,您需要将变量初始化为零并加一。
set /a photos=0
for %%G in (*.png) do (
set /a photos+=1
set folder1[!photos!]=%%~G
)
【讨论】:
感谢您指出错误。我已经更新了代码,但是随机发生器有时会在 %photos% 值之外再选择一个。我已经更新了这方面的主要帖子。 修改为如下解决问题,但我不确定是否有更合适的解决方案 set /a "_rand=(!RANDOM! * (%photos%-1) /32768)+1 " @mAzri,问题不在于随机码。它与文件数量的计算有关。即使目录中有一个文件,您的计数也将是 2。您需要将变量初始化为零。然后在创建数组变量之前在循环中添加一个。以上是关于以数组编号为变量返回循环内数组的内容的主要内容,如果未能解决你的问题,请参考以下文章
C++_第七章函数的基本知识_求阶乘的子函数_ 函数参数类型为数组_ 求数组内所有元素和部分元素和的方法_实现了先从键盘输入到一个数组中,再用for循环取读出数组中的元素 for循环也可以用bre(