Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление скрытых папок по маске (http://forum.oszone.net/showthread.php?t=149763)

chatlaninsan 04-09-2009 16:16 1211539

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

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

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

Petya V4sechkin 04-09-2009 16:22 1211545

Цитата:

Цитата chatlaninsan
потому ка они засирают систему.

В чем это выражается?

chatlaninsan 04-09-2009 16:26 1211550

в том что занимают место на диске, а а если диск небольшой ну скажем всего 15 гигов ... как говориться рано или поздно для новых обновлений просто не хватит места для установки

megaloman 04-09-2009 21:51 1211770

Вот вариант скрипта - перенесите его в блокнот, сохраните в файл с расширением 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 1213155

megaloman cпасибо, работает. Нашёл еще через PowerShel

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

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

chatlaninsan 07-09-2009 17:22 1213454

Немного ошибся в PowerShell лучше вот так сделать

Код:

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

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


Время: 06:16.

Время: 06:16.
© OSzone.net 2001-