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.

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.


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"

3
Nie chcę usuwać folderu udostępniania.
Michael K


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.


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.


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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.