Tworzę skrypt wsadowy i część skryptu próbuje usunąć katalog i wszystkie jego podkatalogi. Otrzymuję sporadyczny błąd dotyczący podkatalogu, który nie jest pusty. Przeczytałem jeden artykuł o tym, że winowajcą jest indeksowanie. Wyłączyłem WSearch, ale w końcu ponownie wystąpił błąd. Oto polecenie:
rmdir /S /Q "C:\<dir>\"
windows
batch-file
Okaleczenie
źródło
źródło
Odpowiedzi:
Doświadczyłem tych samych problemów, o których wspomniał Harry Johnston.
rmdir /s /q
narzekałby, że katalog nie jest pusty, mimo że/s
ma to zrobić za Ciebie! Osobiście uważam, że to błąd w systemie Windows.Moje obejście polega na tym, że
del
wszystko w katalogu przed usunięciem samego katalogu:(
1>nul
Ukrywa standardowe wyjście,del
ponieważ w przeciwnym razie wyświetla każdy plik, który usuwa).źródło
mydir
generowały ten sam błąd „niepusty”. Więc musiałemcd
wejśćmydir
i wykonaćdel
na plikach w każdym z tych katalogów. Ostatecznie zadziałało, ale gdybym musiał powtórzyć ten proces po raz trzeci na innym poziomie, czułbym się dość pokonany.del /s
jest.rd /s /q mydir
komendy.Znam ten problem. Najprostszym obejściem jest warunkowe powtórzenie operacji. Nigdy nie widziałem, żeby to zawodziło dwa razy z rzędu - chyba że rzeczywiście jest otwarty plik lub problem z uprawnieniami, oczywiście!
źródło
IF EXIST
kryjówkiAccess is denied
i inne sytuacje. Dodałem coś podobnegoDIR c:\deleteme
i sprawdzanie błędów przed wszystkim.wprowadź wiersz polecenia jako administrator i uruchom
źródło
Właśnie napotkałem ten sam problem i był związany z utratą lub uszkodzeniem niektórych plików. Aby rozwiązać problem, po prostu uruchom check disk:
Można to uruchomić z okna wyszukiwania lub z wiersza polecenia cmd.
/F
Rozwiązuje wszelkie problemy znalezione, jak odzyskanie plików. Po zakończeniu działania możesz usunąć pliki i foldery w zwykły sposób.źródło
Miałem podobny problem, próbowałem usunąć pusty folder za pomocą eksploratora Windows. Pokazał mi nie pusty błąd, więc pomyślałem, że spróbuję przez admin cmd, ale żadna z odpowiedzi tutaj nie pomogła.
Po przeniesieniu pliku do pustego folderu. Udało mi się usunąć niepusty folder
źródło
Jak stwierdził @gfullam w komentarzu do odpowiedzi @ BoffinbraiN, usuwany
<dir>
sam może nie być tym, który zawiera pliki: mogą w nim znajdować się podkatalogi, w<dir>
których pojawia się komunikat „Katalog nie jest pusty”, a jedynym rozwiązaniem byłoby wtedy rekurencyjnie iteruj po katalogach, ręcznie usuwając wszystkie zawierające je pliki ... Ostatecznie zdecydowałem się użyć porturm
z UNIX.rm.exe
pochodzi z Git Bash, MinGW, Cygwin, GnuWin32 i innymi. Po prostu musisz mieć jego katalog nadrzędny w swojej PATH, a następnie wykonywać tak, jak w systemie UNIX.Przykład skryptu wsadowego:
źródło
To, co zadziałało, jest następujące. Wygląda na to, że polecenie RMDir prawie cały czas wyświetla komunikat „Katalog nie jest pusty” ...
źródło
Miałem „C: \ Users \ User Name \ OneDrive \ Fonts”, które zostało mklink'ed (/ D) do „C: \ Windows \ Fonts” i mam ten sam problem. W moim przypadku
pomogło mi. Mam nadzieję, że Tobie też pomoże; D.
źródło
W moim przypadku właśnie przeniosłem folder do katalogu głównego w ten sposób.
Następnie uruchomiono polecenie, aby usunąć katalog
źródło
rmdir c:\<moved directory> /s /q
jest poprawna odpowiedźPrzyczyną
rd /s
odmowy usunięcia niektórych plików są najprawdopodobniej atrybuty plików TYLKO DO ODCZYTU w plikach w katalogu.Właściwym sposobem rozwiązania tego problemu jest upewnienie się, że najpierw zresetowałeś atrybuty wszystkich plików:
Mogą istnieć inne, takie jak pliki ukryte lub systemowe, więc jeśli chcesz grać bezpiecznie:
źródło
Podobnie jak odpowiedź Harry'ego Johnstona, zapętlam, aż zadziała.
źródło
System Windows czasami jest „zepsuty przez projekt”, więc musisz utworzyć pusty folder, a następnie utworzyć kopię lustrzaną „uszkodzonego folderu” z „pustym folderem” w trybie kopii zapasowej.
Utwórz pusty katalog w ten sposób:
nadpisz uszkodzony folder pustym folderem w ten sposób:
a następnie usuń ten folder
Jeśli to nie pomoże, spróbuj uruchomić ponownie w „trybie odzyskiwania z wierszem poleceń”, przytrzymując klawisz Shift po kliknięciu przycisku Uruchom ponownie i próbując ponownie uruchomić to polecenie w trybie odzyskiwania
źródło
/W:0
aby uniknąć niepotrzebnych opóźnień. Możesz tego nie chcieć,/b
ponieważ wymaga to uprawnień administratora. Tryb odzyskiwania nie jest odpowiedni dla tego pytania, ponieważ mówimy o skrypcie wsadowym, a nie o kimś, kto ręcznie próbuje usunąć katalog.Przychodzą mi do głowy następujące możliwe przyczyny:
W przypadku 1.) możesz spróbować
runas /user:Administrator
uzyskać wyższe uprawnienia lub uruchomić plik wsadowy jako administrator za pomocą menu kontekstowego. Jeśli to nie pomoże, może nawet administrator nie ma uprawnień. Następnie musisz przejąć prawo własności do katalogu.2.) pobierz Process Explorer , kliknij
Find/Find handle or DLL...
lub naciśnij Ctrl+F, wpisz nazwę katalogu i dowiedz się, kto go używa. Jeśli to możliwe, zamknij aplikację korzystającą z katalogu.źródło