Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   WSH + FSO - поиск объектов по каталогам (http://forum.oszone.net/showthread.php?t=98948)

dsa 24-01-2008 14:08 724492

WSH + FSO - поиск объектов по каталогам
 
Приветствую,
имеется простой сценарий и вопрос:

***

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 724614

Код:

'--------------------------
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 724625

если плясать от исходного...

Код:

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 725103

Ramzes_ & Sham - Thnks!)

Dr.Dark 25-08-2008 20:18 883623

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, а там ищи файлы или что надо делай.


Время: 02:32.

Время: 02:32.
© OSzone.net 2001-