2008-09-18 11 views
266

Potrzebuję sposobu, aby rekursywnie usunąć folder i jego dzieci, czy jest tam wstępnie zbudowane narzędzie do tego, czy muszę go napisać?RM -rf odpowiednik dla Windows?

DEL/S nie usuwa katalogów.

deltree została usunięta z systemu Windows 2000+

+0

Czy DEL/s (a) nie działa w ogóle (jest ona dostępna tylko w niektórych wersjach) lub (b) pozostawić katalog najwyższego poziomu, ale usuń wszystko pod nim lub (c) zostaw wszystkie katalogi podczas usuwania wszystkich plików? – wnoise

+0

@Aaron, odpowiedź c, musisz użyć rmdir/s, aby usunąć katalogi i pliki. – Wedge

+19

Czy to naprawdę "format c:", to instalacja systemu Linux? Oczywiście, żartuję. –

Odpowiedz

392

RMDIR lub RD jeśli są za pomocą klasyczne polecenie wiersza polecenia (cmd.exe):

rd /s /q "path" 

Jeśli używasz PowerShell można użyć Remove-Item (co jest aliasem del, erase, rd, ri, rm i rmdir) i zajmuje -Recurse argument, że może być zwarte do -r

rd -r "path" 
+53

Warto zauważyć, że dla dużej liczby plików rmdir/s/q jest zwykle znacznie szybszy niż odpowiednik operacji "wybierz dir, shift + delete" w eksploratorze. – Wedge

+1

Co powiesz na używanie flag do dopasowywania nazw katalogów? Jeśli chcę upuścić wszystkie katalogi pod foo \, 'rmdir/s/q foo \ *' podaje błąd niepoprawnej składni. –

+8

To nie usuwa plików, takich jak rm -rf, a także zwraca wartość niezerową, gdy katalog nie istnieje, więc 'rd/s/q foo && echo" yay "' zawiedzie, jeśli katalog " foo "nie istnieje. –

2

rmdir/s dirname

2

Spróbuj polecenia:

+0

pracował dla mnie w kombinacji w/rmdir/s/q, ponieważ niektóre pliki były zablokowane, a rmdir na nich nie działał. del/foldername nuked zablokowane pliki, które następnie pozwoliły rmdir pozbyć się katalogu root. Miły. – bbqchickenrobot

61

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Usuwa wszystkie katalogi i pliki w podanym katalogu oprócz samego katalogu. Służy do usuwania drzewa katalogów.

  • /Q Tryb cichy, nie pytaj, jeśli OK, aby usunąć drzewa katalogów z /S

+4

Dzięki za wyjaśnienie parametrów. Przyjęta odpowiedź tego nie robi, niestety. – Thomas

13

Można zainstalować Cygwin, który ma rm jak również ls itp

0

Jest również deltree, jeśli używasz starszej wersji systemu Windows.

Bardzo lubię ten miejscu za znalezienie poleceń: SS64: Del - Delete Files

97

admin:

takeown /r /f folder 
cacls folder /c /G "ADMINNAME":F /T 
rmdir /s folder 

Works do niczego w tym pliki sys

EDIT: I rzeczywiście znaleźć najlepszy sposób, który również rozwiązuje plik ścieżka zbyt długi problem również:

mkdir \empty 
robocopy /mir \empty folder 
+2

To jest jedyna rzecz, która zadziałała dla mnie po pliku, nad którym pracowałem zamknięty z powodu czegoś, co zrobiłem (głupie mnie: P) Dziękuję bardzo! –

+2

Wow, fajna sztuczka, nigdy nie widziałem 'robocopy' – jbnunn

+0

Dobry zestaw sztuczek! Dzięki! – Konrads

2

Można zainstalować GnuWin32 i natywnie natywnie używać poleceń w oknach.Instaluję to zanim zainstaluję cokolwiek innego na minty świeżej kopii okien. :)

2

Oto co trzeba zrobić ...

Utwórz plik wsadowy z poniższej linii

RMDIR /S %1

Zapisz plik wsadowy jako Remove.bat i umieścić go w C:\windows

Utwórz następujący klucz rejestru

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

Wprowadzenie regedit i aktualizować wartość domyślna HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default z następującą wartością

"c:\windows\REMOVE.bat" "%1"

to wszystko! Teraz można kliknąć prawym przyciskiem myszy dowolny katalog i użyć funkcji RMDIR

0

oto co pracował dla mnie:

Spróbuj zmniejsza długość ścieżki. tj. :: Zmień nazwę wszystkich folderów, które prowadzą do takiego pliku, do najmniejszych możliwych nazw. Powiedz imiona jednoliterowe. Zmień nazwę w hierarchii folderów. Dzięki temu skutecznie zmniejszasz długość ścieżki. Teraz spróbuj od razu usunąć plik.

1

Najpierw przyjrzyjmy się co rm -rf robi:

C:\Users\ohnob\things>touch stuff.txt 

C:\Users\ohnob\things>rm -rf stuff.txt 

C:\Users\ohnob\things>mkdir stuff.txt 

C:\Users\ohnob\things>rm -rf stuff.txt 

C:\Users\ohnob\things>ls -l 
total 0 

C:\Users\ohnob\things>rm -rf stuff.txt 

Istnieją trzy scenariusze, w których rm -rf jest powszechnie stosowane tam, gdzie oczekuje się, aby powrócić 0:

  1. Określona ścieżka nie istnieje.
  2. Podana ścieżka istnieje i jest katalogiem.
  3. Podana ścieżka istnieje i jest plikiem.

Mam zamiar zignorować całą sprawę uprawnień, ale nikt nie używa uprawnień lub próbuje odmówić sobie prawa do zapisu na rzeczy w systemie Windows tak czy inaczej (OK, to ma być żart ...).

Najpierw set ERRORLEVEL to 0, a następnie usuń ścieżkę tylko wtedy, gdy istnieje, używając różnych poleceń w zależności od tego, czy jest to katalog, czy nie. IF EXIST nie ustawia ERRORLEVEL na 0, jeśli ścieżka nie istnieje, więc ustawienie ERRORLEVEL na 0 jako pierwsze jest konieczne, aby prawidłowo wykryć powodzenie w sposób, który naśladuje normalne użytkowanie rm -rf. Ochrona RD z jest konieczna, ponieważ RD, w przeciwieństwie do rm -f, wygeneruje błąd, jeśli cel nie istnieje.

Poniższy fragment kodu zakłada, że ​​przedrostek DELPATH jest poprzednio podany. (Jest to bezpieczne, gdy robisz coś takiego, jak SET DELPATH=%1. Spróbuj wstawić ECHO %1 w .cmd i przekazać mu argument zawierający spacje i zobaczyć, co stanie się dla ciebie). Po ukończeniu tego fragmentu możesz sprawdzić, czy nie udało się uzyskać IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing. 
SET DELPATH_DELMETHOD=RD 
PUSHD %DELPATH% 2>NUL 
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD) 
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP 
: # Reset ERRORLEVEL so that the last command which 
: # otherwise set it does not cause us to falsely detect 
: # failure. 
CMD /C EXIT 0 
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH% 
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH% 

Punkt jest taki, że wszystko jest prostsze, gdy środowisko jest zgodne z POSIX. Lub jeśli zainstalujesz minimalny MSYS i po prostu go użyjesz.

0

del/s/q directorytobedeleted

+2

Spróbuj dodać opis/wyjaśnienie. –

8

Przejdź do ścieżki i wywołać to polecenie.

rd /s /q "FOLDER_NAME" 

/s Usuwa określony katalog i wszystkie podkatalogi, w tym dowolne pliki. Użyj/s, aby usunąć drzewo.

/q: Uruchamia rmdir w trybie cichym. Usuwa katalogi bez potwierdzenia.

/? : Wyświetla pomoc w wierszu polecenia.

3

Na usuwanie katalogu (lub nie istnieje) należy stosować następujące:

if exist myfolder (rmdir /s/q myfolder)