Пакет - получение "Каталог не пуст" в команде rmdir
Я делаю пакет script, а часть script пытается удалить каталог и все его подкаталоги. Я получаю прерывистую ошибку о том, что подкаталог не пуст. Я читал одну статью о том, что индексирование является виновником. Я отключил WSearch, но в итоге я снова получил ошибку.
rmdir /S /Q "C:\<dir>\"
Ответы
Ответ 1
У меня были те же проблемы, что и Гарри Джонстон. rmdir /s /q
будет жаловаться на то, что каталог не был пустым, хотя /s
предназначен для освобождения для вас! Я думаю, что это ошибка в Windows, лично.
Мое обходное решение - это del
все в каталоге перед удалением самого каталога:
del /f /s /q mydir 1>nul
rmdir /s /q mydir
(1>nul
скрывает стандартный вывод del
, потому что в противном случае он перечисляет каждый отдельный файл, который он удаляет.)
Ответ 2
Я знаком с этой проблемой. Простейшим обходным путем является условное повторение операции. Я никогда не видел, чтобы он терпел неудачу дважды подряд - если на самом деле не существует открытого файла или проблемы с разрешениями, очевидно!
rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
Ответ 3
Я только столкнулся с той же проблемой, и это связано с тем, что некоторые файлы потеряны или повреждены. Чтобы исправить проблему, просто запустите контрольный диск:
chkdsk /F e:
Это можно запустить из окна окна поиска или из командной строки. /F
исправляет любые обнаруженные проблемы, например восстановление файлов. После завершения работы вы можете удалить файлы и папки, как обычно.
Ответ 4
введите Командная строка в качестве администратора и запустите
rmdir /s <FOLDER>
Ответ 5
Как указано в комментарии к @BoffinbraiN, комментарий <dir>
, который вы удаляете, может быть не таким, который содержит файлы: в <dir>
могут быть подкаталоги, которые получают "каталог не пуст" сообщение, и единственным решением тогда было бы рекурсивно перебирать каталоги, вручную удаляя все их содержащие файлы... Я решил решить использовать порт rm
из UNIX. rm.exe
поставляется с Git Bash, MinGW, Cygwin, GnuWin32 и другими. Вам просто нужно иметь родительский каталог в вашем PATH, а затем выполнить так же, как в системе UNIX.
Пакет script пример:
set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"
Ответ 6
У меня была аналогичная проблема, я попытался удалить пустую папку через проводник Windows. Показывает мне непустую ошибку, поэтому я решил попробовать ее с помощью admin cmd, но ни один из ответов здесь не помог.
После того, как я переместил файл в пустую папку. Мне удалось удалить непустую папку
Ответ 7
Что сработало для меня, так это следующее. Мне кажется, что команда RMDir выдаст "каталог не пустой" почти все время...
:Cleanup_Temporary_Files_and_Folders
Erase /F /S /Q C:\MyDir
RMDir /S /Q C:\MyDir
If Exist C:\MyDir GoTo Cleanup_Temporary_Files_and_Folders
Ответ 8
Я могу думать о следующих возможных причинах:
- есть файлы или подкаталоги, которым требуются более высокие разрешения
- Существуют файлы, которые используются не только WSearch, но, возможно, вашим антивирусным сканером или чем-либо еще.
Для 1.) вы можете попробовать runas /user:Administrator
, чтобы получить более высокие привилегии или запустить командный файл в качестве администратора через контекстное меню. Если это не поможет, возможно, даже администратор не имеет прав. Затем вам нужно взять на себя управление каталогом.
Для 2.) скачать Process Explorer, нажмите Find/Find handle or DLL...
или нажмите Ctrl+F, введите имя каталога и узнайте, кто использует его. Закройте приложение, которое использует каталог, если это возможно.
Ответ 9
Как и Гарри Джонстон, я зацикливаюсь до тех пор, пока это не сработает.
set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
rd /s /q "%dirPath%"
goto removedir
)
Ответ 10
У меня был "C:\Users\Имя пользователя \OneDrive\Fonts", который был связан с mklink (/D) до "C:\Windows\Fonts", и у меня была та же проблема. В моем случае
cd "C:\Users\Имя пользователя \OneDrive"
RD/S шрифты
Y (для подтверждения действия)
помог мне. Я надеюсь, что это поможет вам; D
Ответ 11
В моем случае я просто переместил папку в корневую директорию.
move <source directory> c:\
И затем выполнил команду для удаления каталога
rmdir c:\<moved directory> /s /q
Ответ 12
rmdir <directory> /s
это сработало для меня.
Ответ 13
Это происходит потому, что вы находитесь в каталоге. Убедитесь, что ваш CLI и проводник не находятся в каталоге. Закройте все из них, чтобы быть уверенным. Затем запустите от имени администратора и cd
в родительский каталог и выполните команду:
rmdir /s /q mydir
Ответ 14
jrose, chkdsk /F e:
, частично работал у меня. После запуска del
и rmdir
продолжалось сбой, но просто удалялся каталог в проводнике.