Во-первых, осторожность. Неполный белый список может привести к удалению важных файлов. Кроме того, эти «нежелательные папки» часто требуются для правильной работы программного обеспечения, которое их создало. Если вы все еще выбираете это решение, вот одна строка с разрывами строки для удобства чтения:
pushd C:\Users\John\Documents && for /D %i in (*) do @( echo %i| findstr /V /I /R /C:"^Important$" /C:"^Keep me$" > NUL && echo rmdir /S /Q %i ) & popd
В своем нынешнем виде это утверждение не делает ничего вредного. Второй эхо-сигнал отображает, а не выполняет команду 'rmdir', и включен в качестве меры предосторожности. Проверьте, будет ли скрипт работать так, как задумано, затем удалите второе вхождение 'echo'.
Краткое объяснение. pushd
временно меняет каталог на папку документов. for /D
перечисляет все каталоги там. Для каждого каталога findstr
совпадает его имя с белым списком. Переключатели /V /I /R
печатают только несоответствующие записи, делают поиск нечувствительным к регистру и включают регулярные выражения. Каждый каталог, который должен быть сохранен, затем отображается как /C:"^dirname$"
. Каталоги, отсутствующие в белом списке, будут findstr
возвращать нулевой уровень ошибки, таким образом выполняя команду после двойных амперсандов, то есть rmdir /S /Q %i
удаляя этот каталог, пустой или нет, без запроса подтверждения.
Если запустить из командного файла, а не напрямую из командной строки, замените каждый %i
на %%i
.