Мені потрібно видалити одну папку, що містить інші папки та файли всередині. Я спробував 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?)
У всякому разі, я стикався з цим досить часто. У більшості випадків проблему можна вирішити, виконуючи 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)"