|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] скрипт ищущий в системе папку Valve и удаляющий её |
|
|
VBS/WSH/JS - [решено] скрипт ищущий в системе папку Valve и удаляющий её
|
Новый участник Сообщения: 19 |
Профиль | Отправить PM | Цитировать Помогите сделать скрипт ищущий в системе папку Valve и удаляющий её.
Заранее спасибо))) |
|
Отправлено: 15:27, 13-01-2011 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать |
Отправлено: 06:12, 14-01-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Задание немного изменилось.
Надо найти файл cs.exe, а потом поднявшись на папку выше удалить её. Можно вариант с батником. SearchFold = "Valve" 'имя искомой папки RootFold = "D:\" 'корневой каталог для поиска FindedFolders ="" ' сюда запишутся все найденные папки call Get_Fold (RootFold) 'вызываем процедуру перебора подкаталогов, их удаления... call OutputResults() ' ...и показа результатов поиска sub Get_Fold (strFoldName) on error resume next Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder(strFoldName) For Each SubFolder In Folder.SubFolders s_path=SubFolder.shortpath 'короткий путь в формате 8.3 f_name = SubFolder.Name if LCase(f_name) = LCase(SearchFold) then 'это приводит сравниваемые имена к нижнему регистру. Таким образом при поиске регистр не учитывается... 'if f_name = SearchFold then ' ...а так регистр будет учитываться. Но мы этот варик закомментили :) 'получаем нормально читаемый полный путь к папке Set objShell = WScript.CreateObject("Shell.Application") Set objFolder = objShell.Namespace(s_path) l_path = objFolder.Self.Path 'длинный путь FSO.DeleteFolder l_path, 0 'прибиваем найденное. 1- удалять объекты с атрибутом "для чтения", 0- нет. FindedFolders=FindedFolders & vbcrlf & ">>" & l_path ' дописываем в переменную "FindedFolders" найденную папку 'exit sub ' вываливаемся из процедуры else call Get_Fold (s_path) '...а теперь саму себя вызываем. Рекурсия, понимаешь :) end if Next end sub sub OutputResults if Len(FindedFolders) = 0 then msgbox("Ничего не нашли...") else msgbox("Чего-то было, но не стало:" & vbcrlf & vbcrlf & FindedFolders) Set FSO = CreateObject("Scripting.FileSystemObject") end if end sub Если бы как-то использовать метод GetParentFolderName, то я бы мог искать папку "hl", а далее поднимаясь на одну выше удалять её... Но как это сделать, я не знаю :-( |
Отправлено: 20:58, 14-01-2011 | #3 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Цитата T3D:
Следующий батник удалит папку, в которой расположен файл cs.exe, на всех дисках. for /f "skip=1" %%a in ('wmic path win32_logicaldisk.drivetype^=3 get name') do ( for /f "tokens=*" %%i in ('dir %%a\cs.exe /a-d /s /b') do ( rd /s /q "%%~dpi" ) ) Цитата T3D:
GetParentFolderName здесь можно использовать так: |
||
Отправлено: 07:45, 15-01-2011 | #4 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Просто изначально задание было искать папку "Valve", но потом подумав мы решили, что люди могли переименовать её или же у них стоит CS:S. Так что логичней искать cs.exe и потом поднимаясь на каталог выше удалять его.
Но и в этом варианте появилась загвоздка, ведь у них он может называться не cs.exe, а к примеру: Run_CSS.exe, css.exe. Так что я решил, что лучше искать либо папку hl, либо файл steam.dll и также далее подниматься на папку выше удалять его. |
|
Отправлено: 11:10, 15-01-2011 | #5 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Батник работает, отлично.
А вот добавив метод я получил следующие, папка "hl" находится. Всё в папке выше неё удаляется, но сама эта папка остаётся... |
Последний раз редактировалось T3D, 15-01-2011 в 17:17. Отправлено: 13:15, 15-01-2011 | #6 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать А так?
Option Explicit Const ROOT_FOLDER = "D:\" Const SEARCH_FOLDER = "hl" Dim strDelFolder Dim objFSO Dim RetVal Set objFSO = CreateObject("Scripting.FileSystemObject") GetFolders ROOT_FOLDER If Len(strDelFolder) Then RetVal = MsgBox("Вы хотите удалить папку """ & strDelFolder & """," & vbNewLine & _ "в которой находится искомая папка """& SEARCH_FOLDER & """?", 33, "Удаление папки") If RetVal = 1 Then objFSO.DeleteFolder strDelFolder, True Else MsgBox "Папка """ & SEARCH_FOLDER & """ не найдена.", 64, "Удаление папки" End If Set objFSO = Nothing WScript.Quit 0 Sub GetFolders(strFolderName) Dim objSubFolder For Each objSubFolder In objFSO.GetFolder(strFolderName).SubFolders If LCase(objSubFolder.Name) = LCase(SEARCH_FOLDER) Then strDelFolder = strFolderName Exit Sub Else GetFolders objSubFolder.Path End If Next End Sub |
Отправлено: 10:03, 16-01-2011 | #7 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Теперь удаляется папка, но удаляется первая найденная, а остальные чтоб удалить - необходимо снова запускать скрипт)
Ну, да ладно, дальше сам разберусь как-нибудь... |
Последний раз редактировалось T3D, 16-01-2011 в 14:47. Отправлено: 13:35, 16-01-2011 | #8 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Хм, не думал, что их несколько. Ну тогда так можно:
Option Explicit Const ROOT_FOLDER = "D:\" Const SEARCH_FOLDER = "hl" Dim strDelFolder Dim objFSO Dim RetVal Dim arrDelFolders Dim i Set objFSO = CreateObject("Scripting.FileSystemObject") GetFolders ROOT_FOLDER If Len(strDelFolder) Then arrDelFolders = Split(strDelFolder, vbNewline) For i = 0 To UBound(arrDelFolders) - 1 If objFSO.FolderExists(arrDelFolders(i)) Then RetVal = MsgBox("Вы хотите удалить папку """ & arrDelFolders(i) & """," & vbNewLine & _ "в которой находится искомая папка """& SEARCH_FOLDER & """?", 33, "Удаление папки") If RetVal = 1 Then objFSO.DeleteFolder arrDelFolders(i), True End If Next Else MsgBox "Папка """ & SEARCH_FOLDER & """ не найдена.", 64, "Удаление папки" End If Set objFSO = Nothing WScript.Quit 0 Sub GetFolders(strFolderName) Dim objSubFolder For Each objSubFolder In objFSO.GetFolder(strFolderName).SubFolders If LCase(objSubFolder.Name) = LCase(SEARCH_FOLDER) Then strDelFolder = strDelFolder & strFolderName & vbNewline Else GetFolders objSubFolder.Path End If Next End Sub |
Отправлено: 15:51, 16-01-2011 | #9 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать вот, теперь идеально))) Спасибо большое
|
Отправлено: 16:03, 16-01-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ищу Программу, ищущий да обрящет | orck | Тест-форум | 4 | 11-01-2011 05:03 | |
Valve: большинство игроков Mac используют для игр ноутбуки | OSZone News | Новости информационных технологий | 0 | 20-11-2010 23:30 | |
Valve не планирует портировать Steam для Linux | OSZone News | Новости информационных технологий | 0 | 24-08-2010 22:30 | |
Разное - [решено] не повредит ли системе констменю "Копировать в папку" и "Переместить в папку"? | celentanoman | Microsoft Windows 2000/XP | 7 | 28-10-2009 03:53 | |
CMD/BAT - [решено] Батник удаляющий Microsoft Office 2007 | ofcoss | Скриптовые языки администрирования Windows | 14 | 04-08-2009 10:45 |
|