是否可以通过索引迭代FileSystemObject SubFolders集合?

时间:2016-02-24 22:56:24

标签: vbscript

我知道可以使用For Each循环迭代SubFolders,如下所示:

for each f in myfolder.SubFolders
    WScript.Echo f.ShortName
next

但是,我想按索引进行迭代。我似乎无法让它工作,也没有在网上找到任何例子。这就是我的尝试:

for i = 1 to myfolder.SubFolders.Count
    WScript.Echo myfolder.SubFolders.Item(i).ShortName
next

有什么建议吗?

修改

以下是用例:

对于至少一个我的子文件夹,我得到一个Permission Denied错误,该错误发生在每一行。因此,我需要在错误处理中包装整个for循环:

on error resume next
for each f in folderobj.SubFolders
    ' do some stuff
next
on error goto 0

我想要做的是更细粒度更可控的错误处理,如下所示:

for i = 0 to folderobj.SubFolders.Count - 1
    on error resume next
    ' access folder
    if Err.Number = RELEVANT_ERROR_NUMBER then
        ' do something sensible
    end if
next

1 个答案:

答案 0 :(得分:2)

由于@Lankymart已经指出Folders属性返回的SubFolders集合不允许索引访问,只能按名称访问。如果需要索引访问,则必须首先将文件夹对象放入数组中:

ReDim sf(myfolder.SubFolders.Count - 1)
i = 0
For Each f In myfolder.SubFolders
  Set sf(i) = f
  i = i + 1
Next

然后,您可以通过索引访问sf中的元素。

For i = 0 To UBound(sf)
  WScript.Echo sf(i).ShortName
Next

请注意,VBScript数组从零开始,因此索引将从0运行到.SubFolders.Count-1

另请注意,如果有任何更改集合,则必须自行将数组与集合重新同步。它不会自动获取变化。

相关问题