Как я могу рекурсивно удалить пустые папки?
"Пустой" считается истинным , если каталог не имеет каталог и файлы не существуют бесполезные автоматически генерируемые файлы Thumbs.db
.DS_Store
и т.д.)
Вот одна строка командной строки, которая удалит все фактически пустые (то есть нулевые файлы) каталог в папке и ниже:
for /f "delims=" %i in ('dir /ad /s /b') do @rd "%i"
По сути, это получает рекурсивный список всех каталогов, начиная с текущего, а затем пытается удалить каждый каталог. Команда rd
по умолчанию не удаляет непустой каталог, поэтому ваши файлы должны быть в безопасности.
Попробуйте это: Удалить пустые каталоги - CNET Download.com
Пустые папки каталога раздражают, но не часто вызывают большую озабоченность. Тем не менее, они накапливаются со временем, и удаление пустых каталогов является разумным и быстрым решением. Крошечная программа встречает вас в основном пустой панелью и значком для понимания ваших результатов. Вверху есть диалоговое окно для указания конкретной папки или диска для поиска, хотя по умолчанию он проверяет ваш диск C.
Вот я удаляю пустой каталог:
C:\>md f
C:\>rmdir f
C:\>
Там я создал один, а затем удалил его. Если в нем есть что-то, то оно не пустое.
Вы можете использовать rmdir /s
если в нем есть что-то:
C:\>rmdir f
The directory is not empty.
C:\>rmdir /s f
f, Are you sure (Y/N)? y
C:\>
И вы можете сделать все это без командной строки.
Рекурсия - это концепция в программировании. Я не думаю, что вы имеете в виду это. И то, реализовано ли что-либо с использованием рекурсии или нет, для вас не имеет значения, поскольку, несомненно, вы не намерены ограничивать себя ... и вас не просто интересует интеллектуальная реализация.
И если у вас возникли проблемы с удалением каталога, подумайте, например, о том, какую ошибку вы получаете, когда пытаетесь удалить каталог, который вы пытаетесь удалить. Вы всегда можете загрузиться с живого CD и удалить его.
Бельведер может сделать это, но вам нужно быть более конкретным, чем "бесполезным", чтобы иметь возможность устанавливать правильные правила.
for /f "delims=" %i in ('dir /ad /s /b') do @rd "%i"
- bobbymcr
Ответ @bobbymcr работает, однако его нужно будет запускать (n-1), умноженное на максимальную глубину каталогов, чтобы быть уверенным, что пустых каталогов нет. Это связано с тем, что for
будет кормить каталоги rd
в порядке убывания, каталог dir
перечисляет их, пытаясь удалить родительский каталог до того, как он освободит его от дочерних.
Поскольку rd
будет только удалить каталоги, которые уже пустые sort
дети первыми и пустые гнезда , будут удалены из дерева в один проход.
Создайте файл [meow].bat
и запустите его из каталога, который вы хотите удалить. Первый параметр - это альтернативное имя временного файла, используемое при необходимости.
:: Asserts the default tempfile name if none is specified.
IF "%1"=="" (
set __tempfile=meow.tmp
) ELSE (
set __tempfile=%1
)
echo %__tempfile%
:: Checks to see that it won't destroy an existing file
IF NOT EXIST %__tempfile% (
:: Gets list of directories in descending depth.
dir /ad /b /s > %__tempfile%
:: Removes empty directories specified in the list sorted in reverse order
for /f "delims=" %%i in ('sort /R %__tempfile%') do @rd "%%i"
:: Deletes tempfile
del %__tempfile%
) ELSE (
:: if the tempfile already exists.
@ECHO Tempfile already exists, please delete %__tempfile% and try again.
)
Используйте командную строку из меню «Пуск / Выполнить» (или комбинацию Windows R). Напишите cmd
чтобы запустить консоль, затем перейдите к диску, на котором находятся каталоги, введя букву диска (например, если они находятся на D:\
вы поставили d:
.
Путь командной строки изменится на желаемый путь. Затем используйте команду cd
для перехода в родительскую папку пустых каталогов (cd D:\ParentDirectory\
). Вы можете использовать вкладку для Windows, чтобы поставить весь путь.
После того, как прибыл в родительский каталог использовать
del /F EmptyDirectory1
Этот метод является лучшим и также удалит папки или файлы, которые не могут быть удалены Windows Explorer.