Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] скрипт ищущий в системе папку Valve и удаляющий её

Ответить
Настройки темы
VBS/WSH/JS - [решено] скрипт ищущий в системе папку Valve и удаляющий её
T3D T3D вне форума

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите сделать скрипт ищущий в системе папку Valve и удаляющий её.

Заранее спасибо)))

Отправлено: 15:27, 13-01-2011

 

Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Осмелюсь предложить бат-файл - при его помощи это сделать гораздо удобнее и проще:
Код: Выделить весь код
for /f "skip=1" %%a in ('wmic path win32_logicaldisk.drivetype^=3 get name') do (
 for /f "tokens=*" %%i in ('dir %%a /ad /s /b ^| findstr /i /e "\<Valve\>"') do (
  if /i "%%~ni"=="Valve" rd /s /q "%%i"
 )
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:12, 14-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

T3D T3D вне форума Автор темы

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить 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
Благодарности: 119

Профиль | Отправить PM | Цитировать


Цитата T3D:
Надо найти файл cs.exe, а потом поднявшись на папку выше удалить её. Можно вариант с батником. »
Это, практически, так же, как и поиск папки.
Следующий батник удалит папку, в которой расположен файл 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"
 )
)
Если нет надобности перебирать диски, а нужен конкретный (например, диск D), то:
Код: Выделить весь код
for /f "tokens=*" %%i in ('dir d:\cs.exe /a-d /s /b') do (rd /s /q "%%~dpi")
Цитата T3D:
Если бы как-то использовать метод GetParentFolderName, то я бы мог искать папку "hl", а далее поднимаясь на одну выше удалять её... Но как это сделать, я не знаю :-( »
Не совсем понял - что же тебе, в конце концов, надо? Удалять ли папку, в которой находится cs.exe или удалять папку "hl"?
GetParentFolderName здесь можно использовать так:
Код: Выделить весь код
If LCase(f_name) = "hl" Then FSO.DeleteFolder FSO.GetParentFolderName(s_path)
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:45, 15-01-2011 | #4

T3D T3D вне форума Автор темы

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Просто изначально задание было искать папку "Valve", но потом подумав мы решили, что люди могли переименовать её или же у них стоит CS:S. Так что логичней искать cs.exe и потом поднимаясь на каталог выше удалять его.
Но и в этом варианте появилась загвоздка, ведь у них он может называться не cs.exe, а к примеру: Run_CSS.exe, css.exe. Так что я решил, что лучше искать либо папку hl, либо файл steam.dll и также далее подниматься на папку выше удалять его.

Отправлено: 11:10, 15-01-2011 | #5

T3D T3D вне форума Автор темы

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Батник работает, отлично.

А вот добавив метод я получил следующие, папка "hl" находится. Всё в папке выше неё удаляется, но сама эта папка остаётся...

Последний раз редактировалось T3D, 15-01-2011 в 17:17.


Отправлено: 13:15, 15-01-2011 | #6


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить 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

T3D T3D вне форума Автор темы

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Теперь удаляется папка, но удаляется первая найденная, а остальные чтоб удалить - необходимо снова запускать скрипт)

Ну, да ладно, дальше сам разберусь как-нибудь...

Последний раз редактировалось T3D, 16-01-2011 в 14:47.


Отправлено: 13:35, 16-01-2011 | #8


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить 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

T3D T3D вне форума Автор темы

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


вот, теперь идеально))) Спасибо большое

Отправлено: 16:03, 16-01-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] скрипт ищущий в системе папку Valve и удаляющий её

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ищу Программу, ищущий да обрящет 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




 
Переход