Удаление пустых папок в Windows - самые быстрые методы
Удаление пустых директорий в Windows 10 действительно простое с помощью небольшого скрипта PowerShell или команды RoboCopy. На самом деле, нет необходимости устанавливать какую-либо программу для очистки пустых директорий на вашем компьютере или сервере.
С помощью PowerShell или RoboCopy, которые входят в состав Windows 10, мы можем удалить все пустые папки и подпапки. Всегда хорошая идея сначала перечислить пустые каталоги, поэтому я добавил эту опцию в оба скрипта.
Ниже приведен пример для обоих скриптов. Я также протестировал скрипты PowerShell и RoboCopy на каталоге с 11 000 пустых подпапок, чтобы выяснить, какой вариант самый быстрый.
Удалить пустые директории с помощью PowerShell
Ниже вы найдете скрипт для удаления пустых каталогов с помощью PowerShell. Если вы хотите сначала протестировать скрипт, что я действительно рекомендую сделать, то вы можете установить переменную $whatif в $true.
В Windows создается скрытый файл Thumbs.db в папках с изображениями. Эти папки кажутся пустыми, даже если вы включили отображение скрытых файлов в Проводнике, вы не увидите Thumbs.db. Чтобы также удалить эти пустые папки, вы можете установить removeHiddenFiles в $true.
Скрипт затем проигнорирует скрытые файлы и удалит папку вместе со скрытыми файлами.
Set to true to test the script
$whatIf = $true
Remove hidden files, like thumbs.db
$removeHiddenFiles = $false
Get hidden files or not. Depending on removeHiddenFiles setting
$getHiddelFiles = !$removeHiddenFiles
Remove empty directories locally
Function Delete-EmptyFolder($path)
{
# Go through each subfolder,
Foreach ($subFolder in Get-ChildItem -Force -Literal $path -Directory)
{
# Call the function recursively
Delete-EmptyFolder -path $subFolder.FullName
}
# Get all child items
$subItems = Get-ChildItem -Force:$getHiddelFiles -LiteralPath $path
# If there are no items, then we can delete the folder
# Exluce folder: If (($subItems -eq $null) -and (-Not($path.contains("DfsrPrivate"))))
If ($subItems -eq $null)
{
Write-Host "Removing empty folder '${path}'"
Remove-Item -Force -Recurse:$removeHiddenFiles -LiteralPath $Path -WhatIf:$whatIf
}
}
Run the script
Delete-EmptyFolder -path "C:\enter\your\path\here"В скрипте мы сначала устанавливаем режим WhatIf. Таким образом, мы можем протестировать скрипт, не удаляя никаких папок.
Далее у нас есть функция Delete-EmptyFolder. Эта функция проходит через каждую подпапку данного пути и рекурсивно вызывает саму себя для обработки подпапок.
Если подкаталогов нет, то он запросит все дочерние элементы в текущей папке. Если дочерних элементов нет, то скрипт удалит пустые каталоги.
Насколько быстро PowerShell удаляет пустые каталоги?
Я протестировал оба скрипта на каталоге с 11.000 пустыми подкаталогами, на глубину 3 уровня. PowerShell потребовалось 12 секунд для удаления всех пустых каталогов. Это когда вы отключаете вывод Write-Host на строке 27. С выводом это заняло в общей сложности 24 секунды.
Запуск скрипта
Самый простой способ запустить этот скрипт — открыть Windows PowerShell ISE. Так вы сможете легко изменить путь и переменную WhatIf. Windows PowerShell ISE также является стандартной программой Windows 10, которую вы найдете в меню Пуск.
- Нажмите на Начать
- Введите PowerShell
- Выберите Windows PowerShell ISE
- Скопируйте сценарий выше
- Вставьте код в раздел скрипта (возможно, вам потребуется сначала его развернуть, смотрите красную стрелку)
- Измените путь и убедитесь, что
WhatIfустановлен в true сначала. - Нажмите на зелёную кнопку, чтобы запустить скрипт.
Удалите пустые папки с помощью RoboCopy
Другим вариантом удаления пустых папок является использование RoboCopy. Этот утилита командной строки встроена в Windows с Windows 7 и может быть использована в PowerShell или CMD.
Вся суть RoboCopy заключается в том, чтобы переместить директорию в ту же папку. Опция /S копирует все подпапки, но исключает пустые папки. Просто убедитесь, что вы используете
Make sure both paths are exactly the same
robocopy "c:\path\to\directory" "c:\path\to\directory" /S /moveЕсли вы хотите сначала перечислить все пустые каталоги с помощью RoboCopy, вы можете использовать переключатель /L.
robocopy "c:\path\to\directory" "c:\path\to\directory" /S /move /LНедостаток использования RoboCopy
Есть один недостаток использования метода RoboCopy: он не удалит пустые директории с файлом Thumbs.db в них. Это маленький файл, который создается Windows в папках с изображениями. Вы можете безопасно удалить этот файл, если директория полностью пуста.
С помощью PowerShell мы можем игнорировать файл и удалить его вместе с пустой директорией. С помощью RoboCopy мы не можем сделать такое.
Насколько быстро RoboCopy удаляет пустые папки?
Robocopy был замечательно быстрее, чем PowerShell. Удаление 11 000 каталогов заняло в среднем 4 секунды.
Завершение
Сначала всегда тестируйте скрипт, используйте режим WhatIf или запустите его на нескольких тестовых папках, чтобы убедиться, что он работает так, как ожидалось.
Метод RoboCopy значительно быстрее, чем PowerShell, но имейте в виду, что он не удалит каталоги с файлом Thumbs.db.
Если у вас есть вопросы, просто оставьте комментарий ниже.



