Войти

Показать полную графическую версию : Удаление скрытых папок по маске


chatlaninsan
04-09-2009, 16:16
Помогите пожалуста создать батник удаления скрытых папок по маске типа : $*$.
Суть проблемы такова, стоит сервер WSUS, который раздает обновления на локальные компы, на который создаются папки бэкапа типа $NtUninstallKB949014$. нужно переодически их удалять потому ка они засирают систему. обычный виндовый чичстильщик не удаляте их.

есть вот такой вариант но он тожене помогает:

for /D /R c:\windows %i in ($*$) do rmdir /S /Q %i

Petya V4sechkin
04-09-2009, 16:22
потому ка они засирают систему.
В чем это выражается?

chatlaninsan
04-09-2009, 16:26
в том что занимают место на диске, а а если диск небольшой ну скажем всего 15 гигов ... как говориться рано или поздно для новых обновлений просто не хватит места для установки

megaloman
04-09-2009, 21:51
Вот вариант скрипта - перенесите его в блокнот, сохраните в файл с расширением VBS, настройте Ваши пути, запускайте как исполнимый файл. Тестировал, вроде работает.
В скрипте использована рекурсия, так что удаляем по маске все директории и во всех поддиректориях.
' Удаление скрытых директорий по маске

' Исходные данные ------------------------------------------------
iiiDir = "I:\Всякая дребедень" ' Директория где удаляем
Maska = "^\$.*\$$" ' Маска удаляемой директории
' ------------------------------------------------------------------

Call AllFolders(iiiDir, Maska)


Sub AllFolders(inDir, inMaska) ' ---------------------------------------------

Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.GetFolder(inDir)
Set SubF = F.SubFolders

For Each Folder In SubF
nA = Folder.Attributes
if nA >= 2066 Then nA = nA - 2048

If nA = 18 Or nA = 19 Or nA = 22 Or nA = 23 Or nA = 50 Or nA = 51 Or nA = 54 Or nA = 55 Then
Set Re = New RegExp
Re.Pattern = inMaska
Re.IgnoreCase = True
If Re.Test(Folder.Name) Then
' MsgBox Folder.Name + " " + CStr(Folder.Attributes) + " " + CStr(Folder.Type) + " " + CStr(Re.Test(Folder.Name))
FSO.DeleteFolder inDir + "\" + Folder.Name, True
Else
Call AllFolders(inDir + "\" + Folder.Name, inMaska)
End If
Else
Call AllFolders(inDir + "\" + Folder.Name, inMaska)
End If

Next

End Sub

chatlaninsan
07-09-2009, 11:01
megaloman cпасибо, работает. Нашёл еще через PowerShel

remove-item -path (Get-ChildItem c:windows -Force $*$) -force -recurse

правда там тоже свои заморочки.

chatlaninsan
07-09-2009, 17:22
Немного ошибся в PowerShell лучше вот так сделать


cd c:\windows
get-item c:\windows\* -force -include $*$ | remove-item -force -recurse


но тут еще проблема запуска этого скрипта на удаленных машинах, но кажеться я ее решил тоже. кому интересно вот тут:
http://www.redline-software.com/rus/support/articles/security/os/powershell-security.php




© OSzone.net 2001-2012