Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript

Модерирует : ShIvADeSt

ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

   

Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
 
а что это?
ничего не ищется в подпапках....

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 10:22 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Руководство разработчика на WSH 2.0 страница 306
по моему это батником проще сделать и вызвать его из вбс скрипа

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:40 29-08-2009 | Исправлено: bomzzz, 11:16 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
bomzzz

черное окно батника не айс....
 
блин везде код с прописанными путями поиска и копирования....

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 12:15 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
читать надо, но вроде не умеет в подпапках искать, лучше прямо досовскую команду выполнить из скрипта, чтоб консольного окна не было - конвертни батник в екзешник (Bat To Exe Converter, или Quick Batch File Compiler). попробуй скрытым запустить из скрипта батник - я не пробовал. подумаешь окошко мелькнет.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:22 29-08-2009 | Исправлено: bomzzz, 12:24 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
но вроде не умеет в подпапках искать

 
искать умеет - рекурсивный перебор (как то так) - но че то я не догоняю как его прикрутить....
 
И как же сделать поиск файла с неизвестным путем...
 
И чтоб поиск шел и в С:\ и в D:\...

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 12:49 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
гугла все знаит
 
Добавлено:
ну я понял как только делать не буду

Цитата:
 
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\Program Files")
For Each SubFolder In Folder.SubFolders
    WScript.Echo SubFolder.Name
Next
 

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

Цитата:
 
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\Program Files")
For Each SubFolder In Folder.SubFolders
Text = Text & SubFolder.Name & vbLf
Next
MsgBox Text
 

вот так наглядней у меня в высоту экрана не влазит.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:55 29-08-2009 | Исправлено: bomzzz, 13:16 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set Folder = FSO.GetFolder("C:\Program Files")  
For Each SubFolder In Folder.SubFolders
next

 
так...а как теперь сюда прикрутить поиск файла?

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 13:58 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну мне самому стало интересно стека хватит и можно ли byVal передавать не переменную, а ссылку на объект, я тут кое что уже набросал, но туплю с этой рекурсией как положено, и кино смотрю одним глазом может получица.  
 
во я тормоз . работает.

Цитата:
 
Set FSO = CreateObject("Scripting.FileSystemObject")
MyFolderPath = "C:\Temp"
Call MyProcedure(MyFolderPath)
MsgBox "Фуххх!!!!"
Sub MyProcedure(FolderPath)
If fso.FileExists(FolderPath& "\" & "MyFile") Then
Set myFile = fso.GetFile(FolderPath & "\" & "MyFile")
myFile.Copy WScript.Path & "MyFile", True
MsgBox "Ура нашелся"
End If
Set MyFolder = FSO.GetFolder(FolderPath)
For Each SubFolder In MyFolder.SubFolders
MsgBox FolderPath & "\" & SubFolder.Name
Call MyProcedure(FolderPath & "\" & SubFolder.Name)
Next
End Sub
 

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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:13 29-08-2009 | Исправлено: bomzzz, 15:30 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хреново блин...не получатся...
 
как же прописать поиск конкретного файла (с неизвестным путем) и скопировать его?...

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 15:27 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну вот перебирает все подпапки по алфавиту и копирует. только после копирования зря дальше перебирает. вот она рекурсия ета...
 
Добавлено:
ну вот в моем програм файл в котором 2798 папок в самой последней по алфавиту находит за несколько секунд.
 
Добавлено:

Цитата:
 
Set FSO = CreateObject("Scripting.FileSystemObject")
MyFolderPath = "C:\Program Files"
Call MyProcedure(MyFolderPath)
MsgBox "Фуххх!!!!"
Sub MyProcedure(FolderPath)
If fso.FileExists(FolderPath& "\" & "MyFile") Then
Set myFile = fso.GetFile(FolderPath & "\" & "MyFile")
myFile.Copy WScript.Path & "MyFile", True
MsgBox "Ура нашелся"
End If
Set MyFolder = FSO.GetFolder(FolderPath)
For Each SubFolder In MyFolder.SubFolders
Call MyProcedure(FolderPath & "\" & SubFolder.Name)
Next
End Sub
 

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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:31 29-08-2009 | Исправлено: bomzzz, 16:06 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
я ж не знаю какая у тебя задача

 
задача найти один файл на компе и скопировать его....
т.е. вести поиск в папках до нахождения файла и потом скопировать его...

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 16:43 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну вот она решена. добавить разве удалить после копирования, окошко ввода для пути и имени в начале если это все что треубется от скрипа, ну и придумать как выйти после копирования если этот скрипт часть большого.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:47 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
пишет разрешение отклонено в 12 строке...(
 

Цитата:
Set FSO = CreateObject("Scripting.FileSystemObject")  
MyFolderPath = "C:\Program Files"  
Call MyProcedure(MyFolderPath)  
MsgBox "Фуххх!!!!"  
Sub MyProcedure(FolderPath)  
If fso.FileExists(FolderPath& "\" & "MyFile") Then  
Set myFile = fso.GetFile(FolderPath & "\" & "MyFile")  
myFile.Copy WScript.Path & "MyFile", True  
MsgBox "Ура нашелся"  
End If  
Set MyFolder = FSO.GetFolder(FolderPath)  
For Each SubFolder In MyFolder.SubFolders  
Call MyProcedure(FolderPath & "\" & SubFolder.Name)  
Next  
End Sub

 
 
Добавлено:
MyFile - это искомый же?

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 17:03 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да.  
 
Добавлено:
у меня вообще то эти скрипты отключены из соображений безопасности и бесполезности. я конвертирую их в екзешники для использования. в принципе могут быть разночтения. так что я уверенно сказать что в таком виде скрипт будет работать не могу.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:15 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
скрипт работает. просто когда я поменял пвапку поиска на C:\ - скрипт стал ошибку показывать. похоже на проблему с папками на которые только чтение.

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 17:35 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хм. так он и читает только.  
 
Добавлено:
у меня оказывается папка Темп на которой я експериментировал тоже только для чтения - ну и соответсвенно все вложенные тоже с такими свойствами - нормально читается и копируется
 
Добавлено:
да ты знаешь когда я поменял на С тоже выдало разрешение отклонено, это из за каких то системный папок. чтоб проверить надо чтоб при ошибке показало эту папку
 
Добавлено:
а может переполнение стека он тоже не резиновый

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:44 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
теперь он ищет и в System Volume Information (в смысле пропускает))):
 
Set FSO = CreateObject("Scripting.FileSystemObject")  
MyFolderPath = "C:\"  
Call MyProcedure(MyFolderPath)  
MsgBox "Фуххх!!!!"  
Sub MyProcedure(FolderPath)  
If fso.FileExists(FolderPath& "\" & "3.txt") Then  
Set myFile = fso.GetFile(FolderPath & "\" & "3.txt")  
myFile.Copy WScript.Path & "3.txt", True  
MsgBox "Ура нашелся"  
End If  
On Error Resume Next
    For Each objFolder In objFolderForFind.SubFolders
        If Err.Number = 0 Then
            FindInSubFolders objFolder, strFileName
 
        ' Если при вызове метода .SubFolders получаем ошибку
        ' (например, на папке «System Volume Information», к которой, по умолчанию, доступ имеет только система),
        ' то просто пропускаем эту папку при обработке.
        Else
            Err.Clear
            'WScript.Echo "Can't enumerate subfolders for folder [" & objFolderForFind.Path & "]"
        End If
    Next
    On Error Resume Next
Set MyFolder = FSO.GetFolder(FolderPath)  
For Each SubFolder In MyFolder.SubFolders  
Call MyProcedure(FolderPath & "\" & SubFolder.Name)  
Next  
End Sub
 
 
осталось теперь только копирование найденного файла прикрутить....
 
Добавлено:
по поводу поиска:
 
-почему после того как нашел - вылезает фуух? или так и должно быть?
(т.е. если ура!!! - значит скрипт нашел искомый файл????)
 
Добавлено:
все - разобрался-работает все.
 
теперь копирование остается....
 
Добавлено:
-и еще бы не мешало прикрутить поиск и на D:\.......

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 18:08 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а как ты папку определил? я как раз с этим ерор разбираюсь. понять не могу вообще в вбс скриптах переходы и метки есть или нет
 
Добавлено:
обратил кстати внимание что если путь из одного диска то две черточки получается

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:24 29-08-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а как ты папку определил?

 
встретилось обсуждение этой проблемы на каком то форуме...)
 
все таки - не подскажешь - как копирование теперь прикрутить? и поиск по D:\?

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 18:42 29-08-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
If fso.FileExists(FolderPath& "\" & "3.txt") Then  
Set myFile = fso.GetFile(FolderPath & "\" & "3.txt")  
myFile.Copy WScript.Path & "3.txt", True
 
копирование вот эти строчки дают. если некопирует - выведи путь папки  
добавь оператор MsgBox FolderPath вот сюда и разберись с количеством знаков обратного слеша \.  
 
ну как прикрутить - просто еще раз запустить проверку с новой переменной. если у тебя этот скрипт не составная часть чего то добавь в начало
Path = InputBox("укажите путь для поиска", Title, "C:\", 100, 100)
MyFile = InputBox("Укажите имя файла", Title, "", 100, 100)

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:48 29-08-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript
ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru