Как добавить элемент в папку 3 в VBScript? - PullRequest
0 голосов
/ 06 июля 2018

Я хочу добавить предмет в список предметов, но не знаю, как это сделать.

Set objShell = CreateObject("Shell.Application")
Set wshShell = CreateObject("WScript.Shell")
Set objFSO = createobject("Scripting.FileSystemObject")
strFontSourcePath = "C:\Fonts"
strFontSourcePath1 = "C:\Fonts2"
Set objNameSpace = objShell.Namespace(strFontSourcePath)
Set objNameSpace1 = objShell.Namespace(strFontSourcePath1)
Set objFolder = objNameSpace.Items()
Set list = objNameSpace1.Items()

For Each objFile In objFolder
    If LCase(Right(objFile, 4)) = ".ttf" Or LCase(Right(objFile, 4)) = ".otf" Then
       'add objFile to list?
    End If
Next

Я пытаюсь по-другому, но я не могу это сделать. например я пытаюсь это

list.Add objFile 

Или это

ReDim Preserve list(UBound(list) + 1)
list(UBound(list)) = objFile

для получения дополнительной информации: тип списка и objFolder: элемент папки 3

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 08 июля 2018

Сообщение об ошибке пытается сообщить вам, что list является коллекцией типа FolderItems3. Коллекция представляет элементы в папке, поэтому вы не можете просто добавить в нее материал. Если вы хотите создать комбинированный список элементов из двух или более папок, вам нужно сделать list обычным массивом и добавить в него элементы из всех папок:

fontSourcePaths = Array("C:\Fonts", "C:\Fonts2")
ReDim list(-1)  'inintialize empty array

For Each dir In fontSourcePaths
    Set ns = objShell.Namespace(dir)
    For Each f In ns.Items
        If objFSO.FileExists(f.Path) Then
            ReDim Preserve list(UBound(list)+1)
            Set list(UBound(list)) = f
        End If
    Next
Next

Настройте условие для добавления элементов в массив по мере необходимости.

Обратите внимание, что добавление массива в цикл является дорогой операцией, которую следует использовать только в том случае, если количество элементов невелико. Для больших чисел вы получите лучшую производительность, используя что-то вроде словаря:

Set dict = CreateObject("Scripting.Dictionary")

For Each dir In fontSourcePaths
    Set ns = objShell.Namespace(dir)
    For Each f In ns.Items
        dict(f) = True
    Next
Next

list = dict.Keys

или ArrayList:

Set list = CreateObject("System.Collections.ArrayList")

For Each dir In fontSourcePaths
    Set ns = objShell.Namespace(dir)
    For Each f In ns.Items
        list.Add f
    Next
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...