Удалить папку $recycle.bin во всех папках

Нужна помощь здесь, пожалуйста...

нужен скрипт, желательно пакетный скрипт для удаления папки $recycle.bin во всех подпапках.

У меня есть диск, на котором у меня есть пользовательские папки, и у каждой пользовательской папки есть своя собственная папка $recycle.bin.

Structure on Drive C:\
User1 > $recycle.bin
User2 > $recycle.bin
User3 > $recycle.bin

Когда пользователь удаляет что-то в своем профиле, он отправляет в c:\user1\$recycle.bin. На данный момент я захожу в каждую папку отдельно, чтобы удалить $recycle.bin.

1 ответ

Решение

Используйте этот более или менее однострочный пакетный файл с путем к папке C:\ быть замененным реальным путем к родительской папке:

@echo off
for /F %%D in ('dir "C:\$recycle.bin" /AD /B /S 2^>nul') do rd /Q /S "%%D" 2>nul

Командная строка выше ищет папку $recycle.bin рекурсивно во всех каталогах диска C: и удаляет каждый найденный $recycle.bin,

Существует также второе решение, которое работает быстрее, поскольку сначала выполняется поиск только скрытых папок в корневом каталоге диска C: (папка пользователя) и поиск следующей папки в каждой папке (пользователя) для поиска папки. $recycle.bin который удаляется, если такая подпапка действительно находится в папке пользователя.

@echo off
for /D %%U in ("C:\*") do (
    for /F %%D in ('dir "%%U\$recycle.bin*" /AD /B 2^>nul') do rd /Q /S "%%U\%%D" 2>nul
)

Третье решение использует второе решение без поиска $recycle.bin в папке пользователя и вместо этого просто предположим, что такая папка есть, и удалите ее. Если подпапка корня диска C: не имеет папки $recycle.bin сообщение об ошибке выводится командой RD, но это сообщение об ошибке подавляется, как описано ниже.

@echo off
for /D %%D in ("C:\*") do rd /Q /S "%%D\$recycle.bin" 2>nul

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

  • dir /?
  • echo /?
  • for /?
  • rd /?

См. Также статью Microsoft Использование операторов перенаправления команд для объяснения 2>nul,

Сообщение об ошибке, выводимое командой DIR в STDERR при отсутствии папки с именем $recycle.bin подавляется перенаправлением сообщения об ошибке на устройство NUL с помощью 2>nul, Оператор перенаправления > должен быть сброшен с ^ применяется при выполнении команды DIR вместо того, чтобы интерпретироваться как перенаправление команды FOR, указанной в недопустимом положении, что приведет к завершению обработки команды из-за синтаксической ошибки.

2>nul также используется в команде RD для подавления вывода сообщения об ошибке в любой папке или файле внутри папки, которая в данный момент используется пользователем, и, следовательно, удаление папки завершается неудачно. В третьем решении это также подавляет сообщение об ошибке, если нет папки $recycle.bin совсем.

Другие вопросы по тегам