我知道可以使用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
答案 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
。
另请注意,如果有任何更改集合,则必须自行将数组与集合重新同步。它不会自动获取变化。