Удалить все папки, кроме определенных папок и подпапок

Удалить все папки, кроме определенных папок и подпапок

У меня SSD с несколькими разделами. Мне нужно работать с J:\ и мне нужно удалить все внутри J:, кроме следующих папок:

J:\System Volume Information
J:\$RECYCLE.BIN
J:\New
J:\Old Stuff

И следующие подпапки:

J:\Papers\Folder
J:\Room\Main Documents
J:\Year\Origin\Part
J:\Year\Origin\Part Two

После долгих поисков и прочтения я написал следующий код:

@ECHO OFF
SETLOCAL
SET "sourcedir=J:\"
SET "keepdir=System Volume Information"
SET "keepdir=$RECYCLE.BIN"
SET "keepdir=New"
SET "keepdir=Old Stuff"
SET "keepdir=Papers\Folder"
SET "keepdir=Room\Main Documents"
SET "keepdir=Year\Origin\Part"
SET "keepdir=Year\Origin\Part Two"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
GOTO :EOF

К сожалению, код выше не работает (он удаляет все внутри J:).

решение1

@echo off & cd /d J:\ || goto :eOf 

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do =;( type "%~f0" | 1>nul find /i "%%~fi" 
           );= || 1>nul 2>&1 rmdir /q /s "%%~fi"

goto :eof

:: Keep the list in the lines below the
:: full path of the folders that remained!

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

1.Используйте пакет со списком папок, которые вы хотите сохранить:

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

2.Используйте цикл для вывода списка папок

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do

3.Для каждой папки в цикле используйте тип в самом bat и проверьте, отображается ли там папка/путь:

type "%~f0" | 1>nul find /i "%%~fi"

4.В случае, если папка/путь не найдены ( ||) в вашей папке, удалите ее:

type ...  find .. || rmdir /q /s "%%~fi"

5.Завершая цикл, выходим из файла:

goto :eOf

Дополнительная литература:

решение2

Предположение:

  1. Сделать J:\> dir /s /b /ad >DirsToRemove.bat
    в спискевсеDIRS на J: (текущий диск) в файл DirsToRemove.bat.
  2. Для редактирования этого файла
    подойдет Блокнот (не Wordpad), но предпочтительнее использовать более продвинутый текстовый редактор.
  3. В каждой строке rmdir /s /qперед именем каталога
    заключите имя в "кавычки, если в имени есть символы ПРОБЕЛА;
    использование кавычек для ВСЕХ имен также допустимо. =>rmdir /s /q "name"
    Более продвинутый текстовый редактор позволяет использовать макросы; использование макроса может быть таким же простым, как начало записи, редактирование одной строки, остановка записи, а затем использование сочетания клавиш для запуска макроса столько раз, сколько вам нужно.
  4. Не забудьте УДАЛИТЬ строки с каталогами, которые вы хотите СОХРАНИТЬ.
  5. Сохраните, затем...
  6. делатьJ:\> .\DirsToRemove.bat

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

Связанный контент