Войти

Показать полную графическую версию : WSH + FSO - поиск объектов по каталогам


dsa
24-01-2008, 14:08
Приветствую,
имеется простой сценарий и вопрос:

***

Option Explicit

Dim FSO
Dim ObjFolder, ObjSubFolder
Dim text, i

Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Set objFolder = fso.getfolder("c:\Someone_Folder")

Set ObjSubFolder = ObjFolder.SubFolders

Call ListSubFolders(objSubFolder)

Public Sub ListSubFolders(obj)
For Each i In obj
text = text & i.name & vbcrlf

Next
end Sub

WScript.Echo Text

***
Соответственно, выводится список всех подкаталогов взятой папки

Каким образом можно вывести так же и вложенные в нее файлы, и файлы каталогов-внуков в тот же поток?


В ADSI (WinNT) у всех объектов есть свойство - object.class, -
таким образом можно создать нечто вроде

if obj.class = "organizationalUnit" then

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

Но на FSO в документации и MSDN ничего не нашол, информации мало
:)
Может, у кого какие идеи есть, или сталкивались?

Можно на JS
Спасибо!

Ramzes_
24-01-2008, 16:32
'--------------------------
Option Explicit
'--------------------------

Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Dim root_folder
Set root_folder = fso.GetFolder("G:\Temp")

Dim output_str
output_str = vbNullString

'--------------------------

Call list_all_childs(root_folder, output_str)

'--------------------------

Call WScript.Echo(output_str)
Call WScript.Quit(0)

'--------------------------
Public Sub list_all_childs(folder, output)
output = output & folder.Path & vbCrLf

Dim child_folder, child_folders
Set child_folders = folder.SubFolders

For Each child_folder In child_folders
Call list_all_childs(child_folder, output)
Next

Dim file, files
Set files = folder.Files

For Each file In files
output = output & file.Path & vbCrLf
Next
End Sub
'--------------------------

Sham
24-01-2008, 17:01
если плясать от исходного...

Option Explicit

Dim FSO
Dim ObjFolder, ObjSubFolder
Dim text, i, pre, fi, fobj, folder

Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Set objFolder = fso.getfolder("c:\Someone_Folder")

Call ListSubFolders(objFolder,"")

'pre - для отступа...
Public Sub ListSubFolders(obj,pre)

Set ObjSubFolder = obj.SubFolders
For Each i In ObjSubFolder

text = text & pre & i.name & vbcrlf
Set folder = fso.getfolder(i.path)

'тут вызовем саму себя
Call ListSubFolders(i, pre & " ")

Set fobj = folder.Files

For Each fi in fobj
text = text & pre & " " & fi.name & vbcrlf
Next

Next
end Sub

WScript.Echo Text

dsa
25-01-2008, 09:07
Ramzes_ & Sham - Thnks!)

Dr.Dark
25-08-2008, 20:18
dsa, Вот ещё вариант
Dim dArray(), idx, idx1, SFCount Idx=1 SFCount=1 Set FSO = CreateObject("Scripting.FileSystemObject") ReDim Preserve dArray(idx) dArray(idx)=InputBox ("Введите полный путь к папке") Sub SFfunc If SFcount=0 and idx1=idx Then exit sub SFCount=0 idx1=idx1+1 Set SD=FSO.GetFolder(dArray(idx1)) For each SF in SD.Subfolders idx=idx+1 Redim Preserve dArray(idx) dArray(idx)=SF.Path SFCount=SFCount+FSO.GetFolder(dArray(idx)).SubFolders.Count call SFfunc next end sub
Врезультате в се подпапки записываются в массив dArray, а там ищи файлы или что надо делай.




© OSzone.net 2001-2012