ComradG
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору diskmen Цитата: Запрос wmi применяется потому, что точное расположение искомой папки неизвестно заранее. | странное однако представление о wmi. советую перечитать на досуге мантры под названием msdn (курить до просветления, а не до галюнов). ежели серьезно, то вкратце попробую объяснить отчего в данном случае использовать wmi является моветоном. во-первых, wmi лучше использовать в случаях удаленного администрирования или нужды доступа к win-объекту, а раз так, то смотрим в сторону FSO. Код: Set objFSO = CreateObject("Scripting.FileSystemObject") | данная команда создаст ссылку на объект FSO. ссылка, конечно, хорошо, но что данный объект может? let's take a look: Код: Const FIXED_DRIVE = 2 Set objFSO = CreateObject("Scripting.FileSystemObject") Set colDrives = objFSO.Drives For Each drive In colDrives If drive.Type = FIXED_DRIVE Then WScript.Echo drive.Letter & ":\" End If Next | в итоге получаем список всех жестких дисков системы без каких-либо танцев с бубном сношений с wmi. то есть если в решение задачи входит пункт "место расположение каталога неизвестно ВАЩЕ", было бы неплохо перебрать винты, не так ли? шагаем далее. как получить с помощью FSO список каталогов некоторой папки? folder.vbs Код: Set objArgs = WScript.Arguments Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(objArgs(0)) 'подкаталоги папки Set colSubfolders = objFolder.Subfolder 'файлы папки Set colFiles = objFolder.Files 'выведем имена всех подкаталогов каталога (не рекурсия) For Each subfolder In colSubfolders WScript.Echo subfolder.Name Next 'выведем имена всех файлов For Each file In colFiles WScript.Echo file.Name Next | пример использования: Код: cscript //nologo folder.vbs "c:\program files" | в заключении о рекурсии. попробую с ходу накидать пример. Код: Set objArgs = WScript.Arguments Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(objArgs(0)) GetFoldersList(objFolder) Sub GetFilesList(ByVal dir) Set colFiles = dir.Files For Each file In colFiles WScript.Echo file.Path Next End Sub Sub GetFoldersList(ByVal dir) Set colFolders = dir.Folders For Each folder In colFolders WScript.Echo folder.Path Next GetFoldersList(folder) End Sub | сразу оговорюсь, что рекурсию я реализовывал лишь на JScript, а это - ее перевод в синтаксис vbs на скорую руку, поэтому ежели будут косяки, то милости просим. да! на счет перебора. чтобы не мучаться и не рисовать монстра из n-ого количества If...Then...Else, гораздо проще было бы создать два массива: в первом содержатся шаблоны поиска, второй - вывод рекурсивного обхода. причем если бы во втором элемент не совпадает с параметрами поиска, то он удаляется. другой вариант - регулярные выражения. если первый способ более подходит для "полиморфного" поиска, то второй для статического, то есть если требуется искать каталог с названием "folder_n", где n - целое число, то регулярки самое оно. все! думайте, пробуйте, решайте, а главное читайте msdn. | Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 16:37 24-12-2011 | Исправлено: ComradG, 17:00 24-12-2011 |
|