Muszę usunąć jeden folder zawierający inne foldery i pliki w środku. Próbowałem deli rmdirpolecenia, ale czasami nie udaje się z niektórymi liniami błędów:[PATH]: The directory isn't empty.
Czy jest jakaś dobra alternatywa?
Muszę usunąć jeden folder zawierający inne foldery i pliki w środku. Próbowałem deli rmdirpolecenia, ale czasami nie udaje się z niektórymi liniami błędów:[PATH]: The directory isn't empty.
Czy jest jakaś dobra alternatywa?
Odpowiedzi:
Zdarza mi się to często z moimi zautomatyzowanymi skryptami kompilacji.
Myślę, że powodem może być aplikacja, która ma otwarty plik w tym katalogu z „share delete”. Oznacza to, że aplikacja pozwala na usunięcie pliku (dlatego uważam, że wywołanie DeleteFile nie kończy się niepowodzeniem), ale plik zniknie dopiero po zamknięciu uchwytu przez aplikację.
Oznacza to, że plik może nadal tam być, gdy rmdirpolecenie próbuje usunąć folder, stąd komunikat o błędzie. Wkrótce potem wspomniana aplikacja zamknie uchwyt, plik zniknie, a gdy przejrzysz folder, aby zobaczyć, który plik rmdirmówi, będzie pusty.
Przynajmniej taka jest moja teoria.
Obejście zaproponowane przez Harry'ego Johnstona wygląda dobrze. Tylko ja wstawiłbym pauzę między rmdirpoleceniami. Oczywiście system Windows nie ma łatwego do skryptu polecenia „pauza” (korekta: starożytne wersje systemu Windows nie, nowsze mają - patrz komentarze). Ale jeśli wystarczająca jest szczegółowość sekund, można użyć pingpauzy:
ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul
Łącznie:
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/powinien być globalny we wszystkich systemach operacyjnych.
timeout /t 3
pausepolecenia).
Próbować:
rmdir /S your_directory
lub:
rmdir /S /Q your_directory
pomijać wiadomości potwierdzające.
deli rmdirnic nie pytam, po prostu wysyłają kilka wierszy, takich jak ten w opisie.
rmdir /susunie wszystko, co jest możliwe do usunięcia. Możesz mieć pliki zablokowane przez program, pliki tylko do odczytu lub pliki, które potrzebujesz dostępu administracyjnego, aby je usunąć. Nie ma jednego polecenia, które
Możesz mieć tylko pliki do odczytu, możesz użyć opcji del / F, aby się ich pozbyć
del /S /F your_directory
rmdir your_directory
Możesz również mieć ukryte pliki, a jeśli naprawdę jesteś pewien, że chcesz je usunąć, możesz to zrobić za pomocą
del /S /F /AH your_directory
rmdir your_directory
Jeśli to nadal się nie powiedzie, oznacza to, że nie masz uprawnień do usunięcia niektórych plików lub niektóre z nich są nadal w użyciu.
Uważam, że w systemie Windows 7 (i być może w innych wersjach) występuje błąd, który czasami powoduje ten objaw; lub może to być błąd w oprogramowaniu innej firmy. (Czy masz przypadkowo zainstalowany program Symantec Endpoint Protection?)
W każdym razie natknąłem się na to dość często. W większości przypadków problem można obejść, uruchamiając rd /s /qdwa lub trzy razy pod rząd.
Jeśli jest to plik wsadowy, możesz zrobić coś takiego:
rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
Użyj delplików wewnątrz, a następnie rmdirusuń folder.
Aby użyć tej rmdirmetody również do usunięcia wszystkich plików, użyj /Sprzełącznika przed nazwą katalogu i /Qukryj monit o usunięcie. Jest to najlepszy sposób, aby to zrobić, ponieważ nie tracisz żadnych plików. Zachowaj ostrożność przy użyciu przełącznika / Q, ponieważ nie ostrzeże Cię on przed atrybutami System lub Ukryty plik
Folder starszych wersji systemu Windows (DOS, Windows 95/98 / ME) DELTREEjest odpowiednikiem RMlub RMDIR. DELTREENa mojej stacji roboczej z systemem Windows 7 używam jednak plików wsadowych.
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.
Myślę, że możesz użyć tego w następujący sposób:
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)"