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