Задание немного изменилось.
Надо найти файл 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", а далее поднимаясь на одну выше удалять её... Но как это сделать, я не знаю :-(