Мне нужно удалить одну папку, содержащую другие папки и файлы внутри. Я пробовал del
и rmdir
команды, но иногда они терпят неудачу с некоторыми ошибками:[PATH]: The directory isn't empty.
Есть ли хорошая альтернатива?
Мне нужно удалить одну папку, содержащую другие папки и файлы внутри. Я пробовал del
и rmdir
команды, но иногда они терпят неудачу с некоторыми ошибками:[PATH]: The directory isn't empty.
Есть ли хорошая альтернатива?
Ответы:
Это часто случается со мной с моими автоматическими сценариями сборки.
Я предполагаю, что причиной может быть какое-то приложение, у которого в этом каталоге открыт файл с «удалением общего ресурса». Т.е. приложение позволяет удалить файл (именно поэтому я считаю, что вызов DeleteFile не завершится ошибкой), но файл исчезнет только после того, как указанное приложение закроет свой дескриптор.
Это означает, что файл все еще может быть там, когда rmdir
команда пытается удалить папку, поэтому появляется сообщение об ошибке. Вскоре после этого указанное приложение закроет свой дескриптор, файл исчезнет, и когда вы осмотрите папку, чтобы увидеть, о каком файле rmdir
идет речь, он будет пустым.
По крайней мере, это моя теория.
Обход, предложенный Гарри Джонстоном, выглядит хорошо. Только я бы вставил паузу между rmdir
командами. Конечно, в Windows нет легко выполняемой команды «пауза» (исправление: в старых версиях Windows этого нет, в более новых версиях - см. Комментарии). Но если секундной детализации достаточно, можно ping
создать паузу:
ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul
Итак, всего:
rd /s /q foo
:: retry once
if exist foo (
:: clear errorlevel
cmd /c
:: pause
ping -n 2 127.0.0.1 >nul
:: retry
rd /s /q foo
)
:: retry yet again
if exist foo (
cmd /c
ping -n 2 127.0.0.1 >nul
rd /s /q foo
)
:: give up
if exist foo {panic}
rm -rf /directory/
должен быть глобальным во всех операционных системах.
timeout /t 3
pause
команды).
Пытаться:
rmdir /S your_directory
или же:
rmdir /S /Q your_directory
пропустить подтверждающие сообщения.
del
и rmdir
ничего не спрашивает, они просто отправляют несколько строк, как в описании.
rmdir /s
удалит все, что можно удалить. У вас могут быть файлы, заблокированные программой, файлы только для чтения или файлы, для удаления которых вам необходим административный доступ. Нет ни одной команды, которая бы позаботилась обо всех этих ситуациях для вас
У вас могут быть некоторые файлы только для чтения, вы можете использовать опцию del / F, чтобы избавиться от них, используя
del /S /F your_directory
rmdir your_directory
Вы также можете иметь некоторые скрытые файлы, и если вы действительно уверены, что хотите удалить их, то вы можете сделать это, используя
del /S /F /AH your_directory
rmdir your_directory
Если это по-прежнему не удается, либо у вас нет разрешения на удаление некоторых файлов, либо некоторые файлы все еще используются.
Я считаю, что есть ошибка в Windows 7 (и, возможно, в других версиях), которая иногда вызывает этот симптом; или это может быть ошибка в стороннем программном обеспечении. (У вас случайно установлен Symantec Endpoint Protection?)
Во всяком случае, я сталкивался с этим довольно часто. В большинстве случаев проблему можно обойти, выполнив rd /s /q
два или три раза подряд.
Если это в командном файле, вы можете сделать что-то вроде этого:
rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
Используйте del
на файлы внутри, а затем, rmdir
чтобы удалить папку.
Чтобы использовать этот rmdir
метод для удаления всех файлов, используйте /S
переключатель перед именем каталога и /Q
подавьте запрос на удаление. Это лучший способ сделать это, так как вы не пропустите ни одного файла. Будьте осторожны, используя ключ / Q, поскольку он не предупредит вас о системных или скрытых атрибутах файла.
Папка более старых версий Windows (DOS, Windows 95/98 / ME), DELTREE
является эквивалентом RM
или RMDIR
. Я использую DELTREE
на своей рабочей станции Windows 7 в пакетных файлах просто отлично, хотя.
Deletes a directory and all the subdirectories and files in it.
To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]
/Y Suppresses prompting to confirm you want to delete
the subdirectory.
[drive:]path Specifies the name of the directory you want to delete.
Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.
Я думаю, что вы можете использовать это так:
msg*your file is going to delete
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\"
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"