То, что вы спрашиваете, невозможно только с помощью FileSystemObject
методов. Даже если вы создали один массив или ArrayList из элементов oFolder.Files
и oFolder.SubFolders
, вам понадобятся два отдельных цикла для этого.
Вы можете использовать объект Shell.Application
для перечисления содержимого папки, но у получающихся объектов нет метода удаления, поэтому вам все равно понадобятся FileSystemObject
объекты и методы для удаления файлов / папок:
path = "C:\some\folder"
Set app = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
For Each it In app.NameSpace(path).Items
If it.IsFolder Then
fso.GetFolder(it.Path).Delete
Else
fso.GetFile(it.Path).Delete
End If
Next
Тем не менее, я не вижу значительного преимущества этого подхода по сравнению с использованием только FileSystemObject
методов и повторением цикла дважды. Если вас беспокоит дублирование кода, просто оберните цикл в процедуру и вызовите эту процедуру для подпапок и файлов.
path = "C:\some\folder"
Sub DeleteItems(list)
For Each it In list
it.Delete
Next
End Sub
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(path)
DeleteItems oFolder.Files
DeleteItems oFolder.SubFolders