Czy del / s (a) w ogóle nie działa (jest dostępne tylko w niektórych wersjach) lub (b) opuszcza katalog najwyższego poziomu, ale usuwa wszystko pod nim lub (c) opuszcza wszystkie katalogi podczas usuwania wszystkich plików?
wnoise,
@Aaron, odpowiedź c, musisz użyć rmdir / s, aby usunąć katalogi i pliki.
Wedge
31
Czy tak naprawdę nie jest format c:to instalacja Linuksa? Oczywiście żartuję.
Basile Starynkevitch,
Odpowiedzi:
694
RMDIR lub RD, jeśli używasz klasycznego wiersza polecenia (cmd.exe):
rd /s /q "path"
RMDIR [/ S] [/ Q] [dysk:] ścieżka
Ścieżka RD [/ S] [/ Q] [drive:]
/ S Usuwa wszystkie katalogi i pliki z określonego katalogu oprócz samego katalogu. Służy do usuwania drzewa katalogów.
/ Q Tryb cichy, nie pytaj, czy możesz usunąć drzewo katalogów za pomocą / S
Jeśli używasz PowerShell można użyć Remove-Item(co jest aliasem del, erase, rd, ri, rmi rmdir) i ma -Recurseargumenty, które mogą być zwarte do-r
Warto zauważyć, że w przypadku dużej liczby plików rmdir / s / q jest zwykle znacznie szybszy niż równoważna operacja „select dir, shift + delete” w Eksploratorze.
Wedge
9
Nie usuwa plików, podobnie 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.
Dirk Groeneveld
17
Co jeśli reż. nie są puste, a niektóre pliki się pojawiają, Access is denieda inne The process cannot access the file because it is being used by another process?
Eugene
6
Właśnie próbowałem tego w siódmym i musisz zrobić / S i / Q (czapki)
ford prefect
2
Z tajemnicy tutaj. Ja wiem, że próbowałem tego polecenia i to nie działa, jeśli nie były plików w drzewie katalogów; teraz wracam i. . . magicznie wydaje się, że działa. Czy ktoś jeszcze ma z tym niespójne zachowanie ?!
Mój bohater! I jedna wskazówka: tworzysz swój pusty folder w C: \ pusty, a potem w każdym zwariowanym folderze możesz po prostu zrobićrobocopy /mir c:\empty .
Léon Pelletier
takeownPomógł mi jak skopiowałem folder z systemem Linux z rsync przez pomyłkę i nie miałem żadnych uprawnień, aby usunąć ten folder ... Nawet robocopy pracował. Dzięki
Jarda
1
Bardzo miła odpowiedź. To działa. (wszystkie inne odpowiedzi na stronie nie). Ale cacls jest przestarzałe. Czy można udzielić współczesnej odpowiedzi? Drugi wariant już działa i nie jest przestarzały.
Gangnus
To nic dla mnie nie robi. Czy ktoś mógłby wyjaśnić, jak to ma działać? (robocopy) - Może usuwać zawartość folderów, ale nie samych folderów
Ralf
114
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S Usuwa wszystkie katalogi i pliki z określonego katalogu oprócz samego katalogu. Służy do usuwania drzewa katalogów.
/Q Tryb cichy, nie pytaj, czy możesz usunąć drzewo katalogów za pomocą /S
Przyjęta odpowiedź jest świetna, ale zakładając, że masz zainstalowany Węzeł, możesz to zrobić o wiele bardziej precyzyjnie z biblioteką węzłów „rimraf”, która pozwala na wzorce globowania. Jeśli często z tego korzystasz (ja to robię), po prostu zainstaluj go globalnie.
yarn global add rimraf
następnie, na przykład, wzór, którego używam stale:
rimraf .\**\node_modules
lub w przypadku jednej linijki, która pozwala uniknąć globalnej instalacji, ale która trwa nieco dłużej w przypadku dynamicznego pobierania pakietu:
pracował dla mnie w połączeniu z / rmdir / s / q, ponieważ niektóre pliki były zablokowane i rmdir na nich nie działał. del / foldername nukował zablokowane pliki, co pozwoliło rmdir pozbyć się katalogu root. Miły.
Istnieją trzy scenariusze, w których rm -rfpowszechnie stosuje się tam, gdzie oczekuje się powrotu 0:
Podana ścieżka nie istnieje.
Podana ścieżka istnieje i jest katalogiem.
Podana ścieżka istnieje i jest plikiem.
Zamierzam zignorować całą kwestię uprawnień, ale nikt nie używa uprawnień ani nie próbuje odmówić sobie dostępu do zapisu w Windowsie (OK, to ma być żart…).
Najpierw ustaw ERRORLEVELna 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. IF EXISTnie ustawia wartości ERRORLEVEL0, jeśli ścieżka nie istnieje, więc ustawienie wartości ERRORLEVEL0 jako pierwsze jest konieczne do prawidłowego wykrycia sukcesu w sposób naśladujący normalne rm -rfużycie. Ochrona za RDpomocą IF EXISTjest konieczna, ponieważ RDw przeciwieństwie dorm -f spowoduje błąd, jeśli cel nie istnieje.
Poniższy fragment skryptu zakłada, że DELPATH jest wstępnie cytowany. (Jest to bezpieczne, gdy zrobisz coś podobnego SET DELPATH=%1. Spróbuj umieścić ECHO %1w sposób .cmdi przekazując jej argument ze spacjami w nim i zobaczyć, co dzieje się na siebie). Po zakończeniu fragmentu kodu możesz sprawdzić, czy wystąpił błąd 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%
Chodzi o to, że wszystko jest prostsze, gdy środowisko jest zgodne z POSIX. Lub jeśli zainstalujesz minimalny MSYS i po prostu go użyjesz.
Możesz zainstalować GnuWin32 i używać poleceń * nix natywnie w systemie Windows. Instaluję to, zanim zainstaluję cokolwiek innego na drobnej świeżej kopii systemu Windows. :)
UŻYWAJ NA WŁASNE RYZYKO. INFORMACJE PRZEKAZANE „W STANIE, W JAKIM SIĘ ZNAJDUJĄ”. NIE PRZETESTOWANY W ROZSZERZENIU.
Kliknij prawym przyciskiem myszy ikonę Windows (zwykle u dołu po lewej)> kliknij „Windows PowerShell (Administrator)”> użyj tego polecenia (z należytą ostrożnością możesz łatwo usunąć wszystkie pliki, jeśli nie jesteś ostrożny):
rd -r -include *.* -force somedir
Gdzie somedir jest niepusty katalog, który chcesz usunąć.
Należy pamiętać, że w przypadku zewnętrznych dysków podłączonych lub dysków z problemami system Windows czasami zachowuje się dziwnie - nie powoduje błędu podczas usuwania (ani żadnej próby kopiowania), ale katalog nie jest usuwany (ani kopiowany) zgodnie z instrukcją. (Odkryłem, że w tym przypadku, przynajmniej dla mnie, polecenie wydane przez @n_y w jego odpowiedzi spowoduje błędy takie jak „get-childitem: plik lub katalog jest uszkodzony i nieczytelny.” W wyniku tego w programie PowerShell)
PÓŹNIEJ, ALE WAŻNA ODPOWIEDŹ dla każdego, kto ma problemy z instalacją pakietów npm na komputerze z systemem Windows i jeśli widzisz błąd z komunikatem „ rm -rf...” nie znaleziono polecenia. Możesz użyć bash cli, aby uruchomić polecenie rm w systemie Windows.
dla użytkowników npm, możesz zmienić konfigurację npm w npm config set script-shell "C:\Program Files\Git\bin\bash.exe"ten sposób, jeśli pakiet npm, który próbujesz zainstalować, ma skrypt poinstalacyjny, który używa rm -rfpolecenia, będziesz mógł uruchomić to rmpolecenie bez potrzeby zmiany czegokolwiek w pakiecie npm lub wyłączenia konfiguracja skryptów po instalacji. (Na przykład styled-componentsużywa rmpolecenia w swoich skryptach poinstalacyjnych)
Jeśli chcesz po prostu użyć rmpolecenia, możesz łatwo użyć bash i przekazać argumenty.
Tak, możesz użyć polecenia „rm” w systemie Windows.
Po prostu spróbuj zmniejszyć długość ścieżki. ie :: Zmień nazwy wszystkich folderów, które prowadzą do takiego pliku, na możliwie najmniejsze nazwy. Powiedz nazwy jednej litery. Zmień nazwę w górę w hierarchii folderów. W ten sposób skutecznie skracasz długość ścieżki. Teraz wreszcie spróbuj od razu usunąć plik.
format c:
to instalacja Linuksa? Oczywiście żartuję.Odpowiedzi:
RMDIR lub RD, jeśli używasz klasycznego wiersza polecenia (cmd.exe):
Jeśli używasz PowerShell można użyć
Remove-Item
(co jest aliasemdel
,erase
,rd
,ri
,rm
irmdir
) i ma-Recurse
argumenty, które mogą być zwarte do-r
źródło
rd /s /q foo && echo "yay"
zawiedzie, jeśli katalog „foo” nie istnieje.Access is denied
a inneThe process cannot access the file because it is being used by another process
?Admin:
Działa na wszystko, w tym pliki sys
EDYCJA: Właściwie znalazłem najlepszy sposób, który rozwiązuje również problem zbyt długiej ścieżki pliku:
źródło
robocopy /mir c:\empty .
takeown
Pomógł mi jak skopiowałem folder z systemem Linux z rsync przez pomyłkę i nie miałem żadnych uprawnień, aby usunąć ten folder ... Nawet robocopy pracował. DziękiRMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
Usuwa wszystkie katalogi i pliki z określonego katalogu oprócz samego katalogu. Służy do usuwania drzewa katalogów./Q
Tryb cichy, nie pytaj, czy możesz usunąć drzewo katalogów za pomocą/S
źródło
Możesz zainstalować cygwin, który ma,
rm
podobnie jakls
itp.źródło
Przejdź do ścieżki i uruchom to polecenie.
/ s: usuwa określony katalog i wszystkie podkatalogi, w tym wszelkie pliki. Użyj / s, aby usunąć drzewo.
/ q: Uruchamia rmdir w trybie cichym. Usuwa katalogi bez potwierdzenia.
/? : Wyświetla pomoc w wierszu polecenia.
źródło
Aby usunąć katalog (niezależnie od tego, czy istnieje), skorzystaj z następujących opcji:
źródło
rmdir /S /Q %DIRNAME%
źródło
Przyjęta odpowiedź jest świetna, ale zakładając, że masz zainstalowany Węzeł, możesz to zrobić o wiele bardziej precyzyjnie z biblioteką węzłów „rimraf”, która pozwala na wzorce globowania. Jeśli często z tego korzystasz (ja to robię), po prostu zainstaluj go globalnie.
następnie, na przykład, wzór, którego używam stale:
lub w przypadku jednej linijki, która pozwala uniknąć globalnej instalacji, ale która trwa nieco dłużej w przypadku dynamicznego pobierania pakietu:
źródło
Wypróbuj to polecenie:
źródło
nazwa_rmdir / s
źródło
Najpierw przejrzyjmy, co
rm -rf
:Istnieją trzy scenariusze, w których
rm -rf
powszechnie stosuje się tam, gdzie oczekuje się powrotu0
:Zamierzam zignorować całą kwestię uprawnień, ale nikt nie używa uprawnień ani nie próbuje odmówić sobie dostępu do zapisu w Windowsie (OK, to ma być żart…).
Najpierw ustaw
ERRORLEVEL
na 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.IF EXIST
nie ustawia wartościERRORLEVEL
0, jeśli ścieżka nie istnieje, więc ustawienie wartościERRORLEVEL
0 jako pierwsze jest konieczne do prawidłowego wykrycia sukcesu w sposób naśladujący normalnerm -rf
użycie. Ochrona zaRD
pomocąIF EXIST
jest konieczna, ponieważRD
w przeciwieństwie dorm -f
spowoduje błąd, jeśli cel nie istnieje.Poniższy fragment skryptu zakłada, że DELPATH jest wstępnie cytowany. (Jest to bezpieczne, gdy zrobisz coś podobnego
SET DELPATH=%1
. Spróbuj umieścićECHO %1
w sposób.cmd
i przekazując jej argument ze spacjami w nim i zobaczyć, co dzieje się na siebie). Po zakończeniu fragmentu kodu możesz sprawdzić, czy wystąpił błądIF ERRORLEVEL 1
.Chodzi o to, że wszystko jest prostsze, gdy środowisko jest zgodne z POSIX. Lub jeśli zainstalujesz minimalny MSYS i po prostu go użyjesz.
źródło
przez Powershell
za pomocą wiersza polecenia
https://stackoverflow.com/a/35731786/439130
źródło
Oto, co musisz zrobić ...
Utwórz plik wsadowy z następującym wierszem
RMDIR /S %1
Zapisz plik wsadowy jako
Remove.bat
i włóż goC:\windows
Utwórz następujący klucz rejestru
HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)
Uruchom
regedit
i zaktualizuj wartość domyślnąHKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default
o następującą wartość"c:\windows\REMOVE.bat" "%1"
Otóż to! Teraz możesz kliknąć prawym przyciskiem myszy dowolny katalog i użyć funkcji RMDIR
źródło
Korzystanie z programu PowerShell 5.1
Zamień dzienniki na nazwę katalogu, który chcesz usunąć.
get-childitem szuka katalogu dzieci o nazwie rekurencyjnie od bieżącej ścieżki (.).
remove-item usuwa wynik.
źródło
Możesz zainstalować GnuWin32 i używać poleceń * nix natywnie w systemie Windows. Instaluję to, zanim zainstaluję cokolwiek innego na drobnej świeżej kopii systemu Windows. :)
źródło
UŻYWAJ NA WŁASNE RYZYKO. INFORMACJE PRZEKAZANE „W STANIE, W JAKIM SIĘ ZNAJDUJĄ”. NIE PRZETESTOWANY W ROZSZERZENIU.
Kliknij prawym przyciskiem myszy ikonę Windows (zwykle u dołu po lewej)> kliknij „Windows PowerShell (Administrator)”> użyj tego polecenia (z należytą ostrożnością możesz łatwo usunąć wszystkie pliki, jeśli nie jesteś ostrożny):
Gdzie
somedir
jest niepusty katalog, który chcesz usunąć.Należy pamiętać, że w przypadku zewnętrznych dysków podłączonych lub dysków z problemami system Windows czasami zachowuje się dziwnie - nie powoduje błędu podczas usuwania (ani żadnej próby kopiowania), ale katalog nie jest usuwany (ani kopiowany) zgodnie z instrukcją. (Odkryłem, że w tym przypadku, przynajmniej dla mnie, polecenie wydane przez @n_y w jego odpowiedzi spowoduje błędy takie jak „get-childitem: plik lub katalog jest uszkodzony i nieczytelny.” W wyniku tego w programie PowerShell)
źródło
PÓŹNIEJ, ALE WAŻNA ODPOWIEDŹ dla każdego, kto ma problemy z instalacją pakietów npm na komputerze z systemem Windows i jeśli widzisz błąd z komunikatem „
rm -rf...
” nie znaleziono polecenia. Możesz użyć bash cli, aby uruchomić polecenie rm w systemie Windows.dla użytkowników npm, możesz zmienić konfigurację npm w
npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
ten sposób, jeśli pakiet npm, który próbujesz zainstalować, ma skrypt poinstalacyjny, który używarm -rf
polecenia, będziesz mógł uruchomić torm
polecenie bez potrzeby zmiany czegokolwiek w pakiecie npm lub wyłączenia konfiguracja skryptów po instalacji. (Na przykładstyled-components
używarm
polecenia w swoich skryptach poinstalacyjnych)Jeśli chcesz po prostu użyć
rm
polecenia, możesz łatwo użyć bash i przekazać argumenty.Tak, możesz użyć polecenia „rm” w systemie Windows.
źródło
oto co dla mnie zadziałało:
Po prostu spróbuj zmniejszyć długość ścieżki. ie :: Zmień nazwy wszystkich folderów, które prowadzą do takiego pliku, na możliwie najmniejsze nazwy. Powiedz nazwy jednej litery. Zmień nazwę w górę w hierarchii folderów. W ten sposób skutecznie skracasz długość ścieżki. Teraz wreszcie spróbuj od razu usunąć plik.
źródło
Jest także deltree, jeśli korzystasz ze starszej wersji systemu Windows.
Naprawdę podoba mi się ta strona do wyszukiwania poleceń: SS64: Del - Usuń pliki
źródło
del / s / q directorytobedeleted
źródło