Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 |

 

  Вопрос: Помогите сделать скрипт VBS Добавлено: 13.01.11 17:25  

Автор вопроса:  gruver
нужен скрипт ищущий в системе папку Valve и удаляющий её.

Помощь очень нужна или мне жопа)

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #1 Добавлено: 13.01.11 20:20
а позволь узнать более подробно почему жопа и какие условия поиска папки?

Ответить

Номер ответа: 2
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #2
Добавлено: 13.01.11 22:00
Вот:
  1. ' Скрипт ищет каталог по имени (с учетом регистра) начиная с определенного корневого каталога
  2. ' Занимался самообразованием здесь: http://www.script-coding.com/WSH/FileSystemObject.html
  3.  
  4. SearchFold = "ru" 'имя искомой папки
  5. RootFold = "C:\windows" 'корневой каталог для поиска
  6. FindedFolders ="" ' сюда запишутся все найденные папки
  7.  
  8. call Get_Fold (RootFold) 'вызываем процедуру перебора подкаталогов...
  9. call OutputResults() ' ...и показа результатов поиска
  10.  
  11. sub Get_Fold (strFoldName)
  12. on error resume next
  13. Set FSO = CreateObject("Scripting.FileSystemObject")
  14. Set Folder = FSO.GetFolder(strFoldName)
  15. For Each SubFolder In Folder.SubFolders
  16. s_path=SubFolder.shortpath 'короткий путь в формате 8.3
  17.     f_name = SubFolder.Name
  18.     
  19.     if LCase(f_name) = LCase(SearchFold) then 'это приводит сравниваемые имена к нижнему регистру. Таким образом при поиске регистр не учитывается...
  20.     'if f_name = SearchFold then ' ...а так регистр будет учитываться. Но мы этот варик закомментили :)

  21. 'получаем нормально читаемый полный путь к папке
  22. Set objShell  = WScript.CreateObject("Shell.Application")
  23. Set objFolder = objShell.Namespace(s_path)
  24. l_path = objFolder.Self.Path 'длинный путь
  25. FindedFolders=FindedFolders & vbcrlf & ">>" & l_path ' дописываем в переменную "FindedFolders" найденную папку
  26. exit sub ' вываливаемся из процедуры
  27. end if
  28. call Get_Fold (s_path) '...а теперь саму себя вызываем. Рекурсия, понимаешь :)
  29. Next
  30. end sub
  31.  
  32. sub OutputResults
  33. if Len(FindedFolders) = 0 then
  34. msgbox("Ничего не нашли...")
  35. else
  36. msgbox("Чего-то есть:" & vbcrlf & vbcrlf & FindedFolders)
  37. end if
  38. end sub

Скопипасть в текстовый документ, сохрани, закрой и смени расширение на vbs

Ответить

Номер ответа: 3
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #3
Добавлено: 13.01.11 22:16
C учетом необходимости удаления:
  1. ' Скрипт ищет каталог по имени (с учетом регистра) начиная с определенного корневого каталога и удаляет его
  2. ' Занимался самообразованием здесь: http://www.script-coding.com/WSH/FileSystemObject.html
  3.  
  4. SearchFold = "Valve" 'имя искомой папки
  5. RootFold = "D:\" 'корневой каталог для поиска
  6. FindedFolders ="" ' сюда запишутся все найденные папки
  7.  
  8. call Get_Fold (RootFold) 'вызываем процедуру перебора подкаталогов, их удаления...
  9. call OutputResults() ' ...и показа результатов поиска
  10.  
  11. sub Get_Fold (strFoldName)
  12. on error resume next
  13. Set FSO = CreateObject("Scripting.FileSystemObject")
  14. Set Folder = FSO.GetFolder(strFoldName)
  15. For Each SubFolder In Folder.SubFolders
  16. s_path=SubFolder.shortpath 'короткий путь в формате 8.3
  17.     f_name = SubFolder.Name
  18.     
  19.     if LCase(f_name) = LCase(SearchFold) then 'это приводит сравниваемые имена к нижнему регистру. Таким образом при поиске регистр не учитывается...
  20.     'if f_name = SearchFold then ' ...а так регистр будет учитываться. Но мы этот варик закомментили :)

  21. 'получаем нормально читаемый полный путь к папке
  22. Set objShell  = WScript.CreateObject("Shell.Application")
  23. Set objFolder = objShell.Namespace(s_path)
  24. l_path = objFolder.Self.Path 'длинный путь
  25. FSO.DeleteFolder l_path, 0 'прибиваем найденное. 1- удалять объекты с атрибутом "для чтения", 0- нет.
  26. FindedFolders=FindedFolders & vbcrlf & ">>" & l_path ' дописываем в переменную "FindedFolders" найденную папку
  27. exit sub ' вываливаемся из процедуры
  28. end if
  29. call Get_Fold (s_path) '...а теперь саму себя вызываем. Рекурсия, понимаешь :)
  30. Next
  31. end sub
  32.  
  33. sub OutputResults
  34. if Len(FindedFolders) = 0 then
  35. msgbox("Ничего не нашли...")
  36. else
  37. msgbox("Чего-то было, но не стало:" & vbcrlf & vbcrlf & FindedFolders)
  38. Set FSO = CreateObject("Scripting.FileSystemObject")
  39. end if
  40. end sub

Ответить

Номер ответа: 4
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #4
Добавлено: 14.01.11 09:32
Немного порихтовал код. Теперь не только все находит, но и все удаляет без пропуска: выход из процедуры при удалении найденного заменен на переход к следующему шагу цикла перебора.
  1. ' Скрипт ищет каталог по имени (с учетом регистра) начиная с определенного корневого каталога и удаляет его
  2. ' Занимался самообразованием здесь: http://www.script-coding.com/WSH/FileSystemObject.html
  3.   
  4. SearchFold = "Valve" 'имя искомой папки
  5. RootFold = "D:\" 'корневой каталог для поиска
  6. FindedFolders ="" ' сюда запишутся все найденные папки
  7.  
  8.   
  9. call Get_Fold (RootFold) 'вызываем процедуру перебора подкаталогов, их удаления...
  10. call OutputResults() ' ...и показа результатов поиска
  11. sub Get_Fold (strFoldName)
  12.  
  13. on error resume next
  14. Set FSO = CreateObject("Scripting.FileSystemObject")
  15. Set Folder = FSO.GetFolder(strFoldName)
  16. For Each SubFolder In Folder.SubFolders
  17. s_path=SubFolder.shortpath 'короткий путь в формате 8.3
  18.     f_name = SubFolder.Name  
  19.     if LCase(f_name) = LCase(SearchFold) then 'это приводит сравниваемые имена к нижнему регистру. Таким образом при поиске регистр не учитывается...
  20.    'if f_name = SearchFold then ' ...а так регистр будет учитываться. Но мы этот варик закомментили :)
  21. 'получаем нормально читаемый полный путь к папке
  22. Set objShell  = WScript.CreateObject("Shell.Application")
  23. Set objFolder = objShell.Namespace(s_path)
  24. l_path = objFolder.Self.Path 'длинный путь
  25. FSO.DeleteFolder l_path, 0 'прибиваем найденное. 1- удалять объекты с атрибутом "для чтения", 0- нет.
  26. FindedFolders=FindedFolders & vbcrlf & ">>" & l_path ' дописываем в переменную "FindedFolders" найденную папку
  27. 'exit sub ' вываливаемся из процедуры
  28. else
  29. call Get_Fold (s_path) '...а теперь саму себя вызываем. Рекурсия, понимаешь :)
  30. end if
  31. Next
  32. end sub
  33.  
  34.   
  35. sub OutputResults
  36. if Len(FindedFolders) = 0 then
  37. msgbox("Ничего не нашли...")
  38. else
  39. msgbox("Чего-то было, но не стало:" & vbcrlf & vbcrlf & FindedFolders)
  40. Set FSO = CreateObject("Scripting.FileSystemObject")
  41. end if
  42. end sub

Ответить

Номер ответа: 5
Автор ответа:
 gruver



Вопросов: 2
Ответов: 4
 Профиль | | #5 Добавлено: 14.01.11 15:52
Дмитрий Юпатовспасибо большое, но задача усложнилась.
Теперь надо найти файл hl.exe, перейти на уровень выше и удалить полученную папку.

Ответить

Номер ответа: 6
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #6
Добавлено: 14.01.11 16:14
в верхней части кода есть комментарий с урликом образовательного ресурса :) Будь добр, зайди и найди там готовый код по поиску файлов. Там есть, я видел. Используй его для получения пути к файлу, т.е. получишь полный путь искомой папки. Ну а как укалить папку - строка 25 моего последнего фрагмента кода.

Ответить

Номер ответа: 7
Автор ответа:
 gruver



Вопросов: 2
Ответов: 4
 Профиль | | #7 Добавлено: 14.01.11 16:16
Спасибо ещё раз)

Ответить

Номер ответа: 8
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #8
Добавлено: 14.01.11 16:21
Вот: http://window.edu.ru/window_catalog/redir?id=24066&file=FS_and_TS.pdf - литература по scripting.FileSystemObject. Тренируйся, и жопа(о которой ты говорил в первом посте) скроется за горизонт. Кстати, а в чем она выражается?

Ответить

Номер ответа: 9
Автор ответа:
 gruver



Вопросов: 2
Ответов: 4
 Профиль | | #9 Добавлено: 14.01.11 16:28
Пока попробовал сделать, но не получается. Сейчас ещё помаюсь.
Ну, меня куратор практики немного покарает)))

Ответить

Номер ответа: 10
Автор ответа:
 gruver



Вопросов: 2
Ответов: 4
 Профиль | | #10 Добавлено: 14.01.11 16:32
Пока попробовал сделать, но не получается. Сейчас ещё помаюсь.
Ну, меня куратор практики немного покарает)))

Ответить

Номер ответа: 11
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #11
Добавлено: 14.01.11 16:34
Выкладывай код, в котором у тебя не получается, тогда разговор продолжим.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам