Мне нужно удалить одну папку, содержащую другие папки и файлы внутри. Я пробовал команды del
и rmdir
но иногда они заканчиваются ошибкой: [PATH]: The directory isn't empty.
Есть ли хорошая альтернатива?
Мне нужно удалить одну папку, содержащую другие папки и файлы внутри. Я пробовал команды del
и rmdir
но иногда они заканчиваются ошибкой: [PATH]: The directory isn't empty.
Есть ли хорошая альтернатива?
Пытаться:
rmdir /S your_directory
или же:
rmdir /S /Q your_directory
пропустить подтверждающие сообщения.
Это часто случается со мной с моими автоматическими скриптами сборки.
Я предполагаю, что причиной может быть какое-то приложение, которое имеет файл, открытый в этом каталоге с "удалением общего ресурса" Т.е. приложение позволяет удалить файл (именно поэтому я считаю, что вызов 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}
У вас могут быть некоторые файлы только для чтения, вы можете использовать опцию 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)"