none
Удалить в папке все папки, кроме нужных RRS feed

  • Вопрос

  • Привет ребята.

    Помогите скриптом. Нужно в определенной папке удалять другие папки, кроме некоторых. Эти некоторые могут меняться\добавляться\удаляться. Остальное все наглухо должно удаляться. К примеру: есть папки профилей пользователей в С:\Documents and Settings\. Нужно все профили убить, кроме определенных.

    Есть у кого решение, подскажите.

    6 октября 2008 г. 11:28

Ответы

  • на VBS

    Set FSO = CreateObject("Scripting.FileSystemObject")
    path="\c:\Documents and Settings\"
     'проверяем - существует ли такой путь
      if (FSO.FolderExists(path) = true) then
       'Смотрим все подкаталоги
        Set Folder = FSO.GetFolder(path)
        For Each SubFolder In Folder.SubFolders
         folder1=SubFolder.Name
         if folder1<>"All Users" and folder1<>"Default User" and folder1<>"LocalService" and folder1<>"NetworkService" and folder1<>"Администратор" then
          folder1=path+folder1
           if (FSO.FolderExists(folder1) = true) then
            Set folder_for_delete = FSO.GetFolder(folder1)
            folder_for_delete.Delete(True)
           else MsgBox "Путь "+folder1+" не найден"
           end if
         end if
        Next
      end if
    7 октября 2008 г. 4:50
  • Вариант с батником

    @echo off
    for /d %%i in ("C:\Documents and Settings\*") do (
        echo %%~nxi | findstr /v "user1 user2" 1>nul && rd /s /q "%%i"
    )

    Должны удалиться все папки кроме "user1" и "user2". Решение будет работать если достаточно прав на удаление.
    7 октября 2008 г. 5:50

Все ответы

  • PowerShell

    Code Snippet

    # c:\profile - папка в которой искать

    # users.txt - файл в котором прописываются папки которые нужно оставить

    $users = Get-Content c:\profile\users.txt

    $folder = Get-ChildItem c:\profile | Where-Object {$_.mode -like "D*"}

    $compare = Compare-Object $users $folder

    $compare | foreach-object {Remove-Item -path c:\profile\$($_.inputobject) -recurse -force}

     

     

    7 октября 2008 г. 4:09
  • на VBS

    Set FSO = CreateObject("Scripting.FileSystemObject")
    path="\c:\Documents and Settings\"
     'проверяем - существует ли такой путь
      if (FSO.FolderExists(path) = true) then
       'Смотрим все подкаталоги
        Set Folder = FSO.GetFolder(path)
        For Each SubFolder In Folder.SubFolders
         folder1=SubFolder.Name
         if folder1<>"All Users" and folder1<>"Default User" and folder1<>"LocalService" and folder1<>"NetworkService" and folder1<>"Администратор" then
          folder1=path+folder1
           if (FSO.FolderExists(folder1) = true) then
            Set folder_for_delete = FSO.GetFolder(folder1)
            folder_for_delete.Delete(True)
           else MsgBox "Путь "+folder1+" не найден"
           end if
         end if
        Next
      end if
    7 октября 2008 г. 4:50
  • Вариант с батником

    @echo off
    for /d %%i in ("C:\Documents and Settings\*") do (
        echo %%~nxi | findstr /v "user1 user2" 1>nul && rd /s /q "%%i"
    )

    Должны удалиться все папки кроме "user1" и "user2". Решение будет работать если достаточно прав на удаление.
    7 октября 2008 г. 5:50
  • Вариант с батником отрабатывает. Smile

    Вариант с vbs не работает Sad Ничего в папке не происходит.

    Вариант с PS не пробовал, поскольку не уверен что без установки PowerShell на 2003 серваки обойдется. А если ставить, то это не совсем подходит. Хотя, реализован он так, как я и думал, отдельный файл в который вносится имя папки, а сам скрипт сверяет содержимое файла с названиями папок в нужной дериктории. Этот вариант мне кажется наиболее удобным в плане администрирования, но вот ставить PowerShell не совсем радует.

    7 октября 2008 г. 10:02
  •  A.I.Naumtsev написано:

    Вариант с vbs не работает Ничего в папке не происходит.

     

    path="\c:\Documents and Settings\" замените на path="c:\Documents and Settings\"

    7 октября 2008 г. 12:56
    Модератор
  •  sie написано:

    path="\c:\Documents and Settings\" замените на path="c:\Documents and Settings\"

    Честно скажу, я менял. Но на работе у меня не срабатывал. Сейчас дома попробовал и все заработало. Очень хорошо. Спасибо.

    7 октября 2008 г. 16:05
  • Про PowerShell вы зря, для администрирования очень отличная вещь, я и в планировщике скрипты пишу.

    А про реализацию сравнения, это я просто как придумал, так и написал, а пришёл Xaegr и ткнул меня носом, что всё гораздо проще :-)

     

    PowerShell

    Code Snippet

    # c:\profile - папка в которой искать и удалять, там находятся папки 1, 2, 3, 4, 5

    # users.txt - файл в котором прописываются в столбик папки и файлы которые нужно оставить

    #

    # 2

    # 4

    # usres.txt

    #

    # Всё решение в одну строчку, далее в планировщик

    Remove-Item -Path c:\profile\* -Recurse -Force -Exclude (Get-Content c:\profile\users.txt)

     

     

    7 октября 2008 г. 22:34
  • Решение будет работать если достаточно прав на удаление.

    дык по другому и не бывает 8)
    8 октября 2008 г. 4:41
  • Очень актуальная тема

    А как можно на VBS еще и удалить все файлы кроме указанных, в указанной папке

    Т.е. в данном примере обговаривается папка C:\Documents and Settings

    в ней удаляется все папки кроме указанных

    + к этому надо удалить все файлы в этой папке, кроме указаных и не трогать файлы в подпапках

     

     

    8 октября 2008 г. 13:35
  • Доброго времени суток,

    можно и так

    Remove-Item -Path c:\profile\* -Recurse -Force -Exclude -Exclude *admin*, *administrator*

    25 июля 2014 г. 5:56