Jak usunąć drzewa katalogów za pomocą pliku wsadowego w systemie Windows 7?

36

Chcę usunąć całą zawartość określonego folderu w systemie Windows 7 za pomocą pliku wsadowego. Mój problem polega na tym, że „del” lub „erase” usuwa tylko pliki, a nie foldery, a „rmdir” lub „rd” zawsze usuwa określony folder z zawartością, ale chcę tylko usunąć zawartość, a nie sam folder . Próbowałem polecenia „ rmdir /S /Q "C:\Share\*"”, które dało mi błąd składniowy.

Jaki jest właściwy sposób to zrobić?

Pracuję na systemie Windows 7 Professional w wersji 64-bitowej i mam uprawnienia administratora.

Michael K.
źródło

Odpowiedzi:

36

Plik wsadowy będzie musiał uruchomić dwa polecenia, jedno w celu wyczyszczenia plików, a drugie w celu usunięcia katalogów potomnych. Zakładam, że katalog, który chcesz usunąć, toC:\Share\

Plik wsadowy powinien wyglądać mniej więcej tak:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q będzie rekurencyjnie przeszukiwał drzewo katalogów usuwając dowolne pliki (nawet pliki tylko do odczytu) bez monitowania o potwierdzenie.

Druga linia zapętla wszystkie podkatalogi (które powinny być teraz puste) i usuwa je.

Skasowanie całego folderu i odtworzenie go (co nie wydaje mi się, że chcesz to zrobić z powodu uprawnień?) Powinno być najłatwiejszym sposobem na wyczyszczenie folderu.

Windos
źródło
Jeśli zrobię tu małą korektę „dla / f %% f” -> „dla / f% f”, to zadziała dobrze :) Dziękuję bardzo.
Michael K
6
delto nie jest konieczne. rd/s/qusunie zarówno pliki, jak i podfoldery.
grawity
1
@grawity deljest głównie dla plików w folderze głównym, może jednak usunąć przełącznik rekurencji.
Windos
5
@MichaelK, %% f jest do użytku w plikach wsadowych,% f do gdy jest to pojedyncze polecenie prosto do wiersza poleceń.
Windos
1
Jeśli którakolwiek z nazw podkatalogów zawiera spacje, możesz dodać „delims =”, aby je poprawnie przetworzyć (dla / f ”delims =" %% f in ...): Zobacz stackoverflow.com/q/5553040/64918
goldPseudo
27
rmdir /s/q C:\Share

Pojawia się „błąd składniowy”, ponieważ rmdirakceptuje tylko pełne nazwy, a nie symbole wieloznaczne. (W cmd.exe, interpretacja symboli wieloznacznych jest pozostawiona poszczególnym programom; nie wszystkie mają.)

Jeśli masz wiele katalogów zaczynających się od Share..., użyj forpętli.

for /d %f in (C:\Share*) do rmdir /s/q "%f"
grawitacja
źródło
3
Nie chcę usuwać folderu udostępniania.
Michael K
12

Spróbuj tego w wierszu polecenia:

rd /s/q "C:\Share"
Chau Chee Yang
źródło
2
Usunął również folder nadrzędny, a nie jego zawartość.
Teoman shipahi
2

Co powiesz na ?

rmdir /S /Q "target"
mkdir "target

EDYCJA: oczywiście to rozwiązanie ma zastosowanie tylko wtedy, gdy można tolerować chwilową nieobecność folderu.

Vasilly.Prokopyev
źródło
Spowoduje to usunięcie oryginalnego folderu.
Michael K,
@MichaelK Moim zadaniem było tolerowanie chwilowej nieobecności folderu, więc wybrałem to rozwiązanie. Pomyślałem, że jest prostszy i bardziej czytelny niż for /fw przypadkach podobnych do mojego. Chciałem tylko udostępnić
Vasilly.Prokopyev
2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

To nie działa, jeśli podkatalogi zawierają inne katalogi zawierające spacje.

Aby to zadziałało, musiałem zacytować ostatni ciąg, taki jak ten

for / f "delims =" %% f in ('dir / ad / bc: \ share \') do rd / s / q "c: \ share \ %% f"

Najwyraźniej powoduje to, że polecenie działa na cytowanym ciągu zamiast na samym ciągu.

Jim JR Harris
źródło
0

Spróbowałbym tego w folderze, w którym wszystkie podfoldery powinny zostać usunięte, ale katalog główny (i pliki w katalogu głównym) pozostały takie, jakie są: dla / D% v w (*) do rd / s / q% v

for / D dopasowuje katalogi, a rd / s / q usuwa je po kolei

Otto Hänninen
źródło
0

po prostu:

rmdir / s / q „ścieżka”

mkdir „ścieżka”

eli
źródło
1
To jest duplikat tej odpowiedzi .
Mówię: Przywróć Monikę