Как автоматически удалять пустые папки в Windows

Со временем сотни пустых папок и ненужных файлов могут занять ваш жесткий диск. В то время как ненужные файлы занимают место на диске и могут быть очищены с помощью параметров очистки диска или хранилища, пустые каталоги остаются.

Пустые папки не занимают места на диске, но для лучшей организации ваших данных вы можете время от времени сокращать их.

В этой статье рассматриваются различные методы поиска и удаления пустых папок на вашем компьютере.

Как найти и удалить пустые папки в Windows?

Пустая папка или каталог - это папка, в которой нет файла или подкаталога. Пустые папки не занимают места на диске, но слишком много из них могут создавать неудобства. Чтобы найти и удалить их, используйте один из методов ниже.

Важное замечание: Запуск рекурсивного автоматического инструмента или командного файла для удаления пустых папок на всем системном диске обычно не рекомендуется. Это связано с тем, что некоторые программы могут не работать и выдают странную ошибку, когда обнаруживается, что отсутствует необходимая папка. Как всегда, применяется стандартное предупреждение. Убедитесь, что у вас есть соответствующие резервные копии, желательно на внешнем диске, прежде чем манипулировать с файловой системой или реестром Windows.

СВЯЗАННЫЕ: рекурсивно находите и удаляйте 0-байтовые файлы в папке в Windows

Давайте начнем с аккуратного инструмента с графическим интерфейсом, за которым последуют собственные методы командной строки и сценариев.

1. Удалите пустые папки с помощью утилиты «Find Empty Files-n-Folders»

Find Empty Files-n-Folders - отличный инструмент, который может рекурсивно находить и удалять пустые файлы (0 байт) и пустые папки в дереве папок.

Загрузите файл Find Empty Files-n-Folders (программа установки размером 600 КБ) с Ashisoft.com.

Выберите папку и нажмите «Сканировать сейчас».

Инструмент будет перечислять пустые файлы и папки на отдельных вкладках.

Нажмите Отметить все папки, а затем нажмите Удалить папки .

Аналогично, чтобы удалить 0-байтовые файлы в выбранном дереве папок, нажмите на вкладку « Пустые файлы ».

У Ashisoft.com есть и другие замечательные инструменты, которые вы можете проверить!


2. Удалите пустые папки, используя команды «for» и «rd»

Вы можете использовать внутренние команды командной строки for и rd чтобы перечислить список папок и удалить пустые.

  1. Нажмите и удерживайте клавишу Shift, щелкните правой кнопкой мыши папку и нажмите здесь « Открыть окно командной строки». Это откроет командную строку в текущем расположении папки, что также можно проверить в консоли. Примечание. Необходимо убедиться, что вы запускаете следующую команду из точного пути родительской папки, где вам нужно найти и удалить пустые подпапки.
  2. Как только вы окажетесь в нужном каталоге в командной строке, запустите эту командную строку:
     for / f "delims ="% i в ('dir / s / b / ad ^ | sort / r') do rd "% i" 2> NUL 

    При этом удаляются все пустые каталоги в подкаталогах из базового пути к папке, включая вложенные пустые папки.

Приведенная выше командная строка любезно предоставлена ​​Раймондом Ченом из Microsoft через его блог The Old New Thing. В этом посте командная строка Рэймонда была немного изменена, так что она также удаляет имена папок, содержащие пробелы.

Как работает команда

Приведенная выше команда выводит список всех подкаталогов (рекурсивно) в текущем базовом пути и сортирует список ( sort /r ) в обратном порядке. В обратном порядке сортировки необходимо убедиться, что перечисление выполняется снизу вверх. Это важно для удаления пустых каталогов, так как вы должны удалить подкаталоги, прежде чем удалить родительский.

Затем он пытается удалить список каталогов (в обратном порядке сортировки) с помощью команды RD . Если каталог не пустой, он переходит к следующему каталогу и так далее. Команда 2>NUL обеспечивает подавление выходного текста «каталог не пустой».

$config[ads_text6] not found

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

Найдите пустые папки, но не удаляйте

Чтобы найти только пустые папки, не удаляя их, используйте этот синтаксис командной строки:

 для / r "D: \ uploads \ 2019" / d% F в (.) do @dir / b "% F" | findstr "^"> nul || эхо% ~ фф 

Он показывает вывод, содержащий список пустых каталогов.

Допустим, у вас есть пустые вложенные папки, например:

 C: \ 1 └───2 └───3 └───4 

Выполнение вышеуказанной команды выводит список только самой глубокой пустой папки → 4 . Технически это правильно, потому что папка не может считаться пустой, если в ней есть подпапка или файл.


3. Найдите и удалите пустые папки с помощью команды Robocopy.

Robocopy - это мощный встроенный инструмент для копирования файлов, который имеет множество расширенных функций. Мы рассмотрели Robocopy в статье «Сравнение содержимого двух папок в Windows».

Предположим, у вас есть папка с именем cars которая содержит несколько подпапок, некоторые из которых пусты. Мы собираемся удалить пустые, используя Robocopy.

Хитрость здесь в том, чтобы использовать команду перемещения Robocopy, передавая одинаковый путь к папке как для источника, так и для места назначения.

  1. Откройте окно командной строки
  2. Введите следующую команду и нажмите клавишу ВВОД:
     robocopy "d: \ автомобильные тарифы \ автомобили" "d: \ автомобильные тарифы \ автомобили" / S / move 

    Здесь важно отметить, что исходные и конечные пути (намеренно) совпадают. Параметр /S указывает Robocopy не перемещать пустые папки по пути «назначения». Поскольку мы упомянули одинаковые пути для источника и места назначения, Robocopy просто удалит пустые папки из-за наличия параметра /S

Пустые папки по выбранному пути теперь очищаются.

Хотите найти пустые папки, но не удалять их?

Вы можете использовать аргумент командной строки /L (только для списка) с Robocopy, чтобы он выполнял только пробный запуск вместо выполнения фактической операции копирования / перемещения.

/L :: List only - не копировать, не ставить отметки времени и не удалять файлы.

/MOVE :: MOVE файлы и каталоги (удалить из источника после копирования).

/S :: copy Подкаталоги, но не пустые.

Вы можете увидеть количество файлов в столбце и услышать путь к папке. 0 означает, что в этой папке нет файлов.

Давайте поставим эту команду на настоящий тест!

Моя папка %APPDATA% заполнена пустыми папками, добавленными программами, которые устарели.

До очистки в папке Appdata \ Roaming было 681 папка, как видно в свойствах папки.

Я открыл командную строку и выполнил следующую команду:

 robocopy "% appdata%" "% appdata%" / S / MOVE 

Примечание. Переменная среды% appdata% преобразуется в папку C:\Users\{username}\AppData\Roaming . Вы можете использовать полный путь к папке или эквивалентную переменную среды с Robocopy. Либо в порядке.

Он успешно удалил 94 пустых папки в моей папке %APPDATA% и подпапках.

Примечание редактора. В командной строке ниже раздела статистики появилась следующая ошибка:

«ОШИБКА 32 (0x00000020) Удаление исходного каталога C: \ Users \ ramesh \ AppData \ Roaming \

Процесс не может получить доступ к файлу, потому что он используется другим процессом ».

Поскольку мы указали Robocopy переместить ( /MOVE ) каталог% APPDATA%, инструмент пытался очистить папку «source» после «перемещения» ее в место назначения. Это невозможно, так как% APPDATA% является специальной папкой. Ошибка не возникает при использовании пути к каталогу, который не является специальной папкой. Поскольку все шло хорошо, я просто проигнорировал (тривиальную) ошибку.

$config[ads_text6] not found

4. Найти и удалить пустые папки с помощью PowerShell

Следующая командная строка PowerShell рекурсивно удаляет пустые папки, расположенные в указанной базовой папке.

  1. Запустите PowerShell и введите следующую команду:
     (gci "folderpath" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Count -eq 0} | Убрать предмет 

    Замените «путь к папке» на расположение базовой папки. Например, я указываю папку Roaming здесь:

     (gci "C: \ Users \ ramesh \ AppData \ Roaming" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Count -eq 0} | Убрать предмет 

    Это рекурсивно удаляет все пустые подпапки в моей папке %appdata% и не показывает никакого вывода, если только не обнаружены какие-либо ошибки.

Обратите внимание, что приведенная выше команда PowerShell очищает только последний уровень пустой вложенной папки. Например, допустим, у вас есть пустые вложенные папки, например:

 C: \ 1 └───2 └───3 └───4 

Выполнение вышеуказанной команды очищает самую глубокую пустую папку → 4 . Повторный запуск сценария очистит другой уровень вложенной папки ( 3 ) и т. Д.

Вы можете использовать сценарий PowerShell в Svendsen Tech PowerShell Wiki для работы с вложенными папками.

Кроме того, вы можете использовать следующий метод - решение Windows Scripting, чтобы рекурсивно очистить все пустые папки, включая вложенные.

Найти пустые папки, но не хотите их удалять?

Хотите получить список пустых папок, но не хотите их удалять? Вместо этого используйте этот пример командной строки:

 (gci "C: \ Users \ ramesh \ AppData \ Roaming" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Count -eq 0} | выберите FullName | Из-GridView 

Команда выводит список пустых папок с полными путями в элемент управления представлением сетки.

Совет: в виде сетки вы можете выбрать все и скопировать выделение, нажав Ctrl + C

Рекомендуется предварительно просмотреть список перед запуском команды для удаления папок.


5. Найдите и удалите пустые папки, используя Windows Scripting

Сотрудник Microsoft Джереми Джеймсон написал VBScript, который рекурсивно удаляет пустые папки. Я добавил больше строк в скрипт, чтобы он принудительно удалял пустые директории только для чтения, выводил агрегированный список пустых папок. Он также выводит список пустых папок, которые не могут быть удалены, вместе с описанием ошибки.

Сценарий способен удалять вложенные пустые каталоги в подпапках.

 Параметр Явный Если (WScript.Arguments.Count 1) Тогда WScript.Echo ("Использование: cscript DeleteEmptyFolders.vbs {path}") WScript.Quit (1) Конец Если Dim strPath: strPath = WScript.Arguments (0) Dim fso: Установите fso = CreateObject ("Scripting.FileSystemObject"). Dim objFolder: установите objFolder = fso.GetFolder (strPath). Dim sDelList, sDelErr, sFolderPath. при доступе к Соединениям и т. д. Для каждой подпапки в папке. SubFolders Подпапка DeleteEmptyFolders Далее при ошибке Перейти к 0 Если folder.SubFolders.Count = 0 And folder.Files.Count = 0 Тогда sFolderPath = folder.Path При ошибке Resume Следующая папка fso.DeleteFolder .Path, True, если Err.number 0, затем sDelErr = sDelErr & Err.number & ":" & Err.description & _ vbCrLf & sFolderPath & vbCrLf & vbCrLf Иначе sDelList = sDelList & vbCrLf & sFnderPath i t = iCnt + 1 Завершить при ошибке Перейти к 0 Завершить при окончании Sub If sDelList = "" And sDelErr = "" Then WScript.Echo "Не найдено пустых папок под" & _ "" "" & strPath & "" "" & "tree" WScript.Quit End If If sDelList "" затем sDelList = "Список удаленных пустых папок" & vbCrLf _ & String (38, "-") & vbCrLf & sDelList & vbCrLf & _ vbCrLf & "Total:" & iCnt & "папки удалены." Если sDelErr "", то sDelErr = "Эти папки не могут быть удалены" & _ vbCrLf & String (45, "-") & vbCrLf & sDelErr WScript.Echo sDelList & vbCrLf & vbCrLf & sDelErr 

Скопируйте приведенный выше код в Блокнот и сохраните файл с расширением .vbs, скажем, deletempty.vbs .

Вы можете запустить скрипт двумя способами:

через командную строку, запустив:

 cscript.exe delempty.vbs "folder_path" 

через графический интерфейс, запустив:

 wscript.exe delempty.vbs "folder_path" 

через меню «Отправить»

Вы можете создать ярлык для скрипта в папке SendTo и назвать его как « Удалить пустые папки» .

Затем щелкните правой кнопкой мыши папку, в которой вы хотите рекурсивно удалить пустые подпапки → щелкните « Отправить» → нажмите « Удалить пустые папки» в меню «Отправить».

Вы увидите список удаленных пустых папок и общее количество, а также папки, которые нельзя удалить, с отображением соответствующих кодов ошибок.

Это оно! Если вам известны другие способы удаления пустых папок в Windows, давайте узнаем об этом в разделе комментариев ниже.

$config[ads_text6] not found

ПОХОЖИЕ СТАТЬИ