2011-01-21 23 views
30

Mam strukturę katalogów/foo/bar/fooBar/... Chcę napisać polecenie Windows, w którym mogę wspomnieć o ścieżce do katalogu foo i usunie wszystkie pliki i katalog rekursywnie w/foo, ale NIE powinien usuwać katalogu foo.Jak usuwać pliki rekurencyjnie

Używam rmdir /q /s [path to foo], ale to polecenie usuwa również katalog foo. Daj mi znać, jeśli masz jakieś polecenie, aby to osiągnąć.

+0

co jeśli do cd/ścieżka/do/foo przed wykonaniem rmdir? – BigMike

+3

del/s * .xml Działa w systemie Windows 10 – JenonD

+0

Możliwy duplikat [Co się stało z deltree i co jest jego zamiennikiem?] (Http://stackoverflow.com/questions/338895/what-ever-happened-to- deltree-and-whats-its-replacement) –

Odpowiedz

42
rd /s /q /path/to/foo 
md /path/to/foo 
+0

Mam kilka zagnieżdżonych folderów i plików z niektórymi, które były tylko do odczytu. To usunęło wszystkie z nich, z wyjątkiem tylko do odczytu, czego się spodziewałem. To było lepsze niż funkcjonalność systemu Windows Server 2003, która zatrzymałaby proces, gdy napotkał plik tylko do odczytu. Dzięki! –

2

deltree/foo/* powinien działać poprawnie.

+1

Jestem na tyle nieszczęśliwy, że nie mam polecenia deltree w systemie Windows XP – Akshay

+0

Powinieneś trzymać się rozwiązania @ Ferruccio. –

+0

Nie działa w win7 x64 – m1m1k

7
del /f /s /q DirectoryWhichContainsFilesToDelete/\* 

Spowoduje to usunięcie wszystkich plików w folderze DirectoryWhichContainsFilesToDelete bez usuwania samego folderu. Miłej zabawy :)

+3

Nie usuwa ** katalogów ** wewnątrz DirectoryWhichContainsFilesToDelete. –

+0

To zadziałało dla moich celów. –

1

Użyłem tego w pliku wsadowym w przeszłości. Używa pętli for do nawigacji po strukturze katalogów.

Tutaj usuwam podkatalogi cvs z drzewa, potrzebne podczas kopiowania z jednej gałęzi do drugiej.

@echo off 
if /I exist CVS. rd CVS /s /q >nul 
for /F %%z in ('dir cvs /ad /s /b') do echo %%z && rd /s /q %%z 
echo Batchfile %0 is complete 
6

Również podrapałem się w głowę. Łatwo jest utworzyć pętlę for, która używa rmdir, ale pozostawia foldery zawierające spacje w długich nazwach. Możliwe jest manipulowanie listą dir i uzyskanie nazw plików 8.3, jednak tutaj jest o wiele prostsze rozwiązanie.

Utwórz pusty folder;

robocopy \empty_folder \folder_with_sub_folders /PURGE 

wszystkie podfoldery & pliki zostaną usunięte.

3

Szukałem prostego polecenia, aby usunąć wszystkie pliki z katalogu rekurencyjnie, ale pozostawiając niezmienioną strukturę katalogów. Więc może to może być ciekawe;)

for /f "delims=" %i in ('dir /B /S /A:-DH') do @del /F /Q /A:H "%i" 

polecenie 'dir/B/S/A: -d' wymienia tylko pliki (/ A: -d) w bieżącym katalogu rekurencyjnie (/ S) bez ' dir "raport podsumowujący (/ B). Pętla 'for' przechodzi przez każdą pełną linię (/ delims =) i wykonuje polecenie delete, wymuszone i ciche. Dodatkowo wykorzystałem ukrytą flagę (/ H) do wymieniania i usuwania niektórych tajemniczych plików (na przykład thumbs.db).

+0

to działało również dla mnie, musiałem usunąć pewne pliki pasujące do rekurencyjnie wieloznacznej we wszystkich podfolderach, więc użyłem 'for/f" delims = "% i in (" dir/b/ad/s "P: \ Systemy \ ALPS \ ~ $ PS * "') do @del/F/Q/A: H"% i "' i wow, zadziałało! –

4
del X /f /s /q 
rd X /s /q 

to spowoduje usunięcie katalogu ROOt. ponownie wykonaj tę operację, najpierw wykonując kopię lub ją najpierw kopiując.

inaczej będziesz musiał zrobić SERII funkiness

dir X /ad /b 

daje listę bezpośrednich podkatalogów X.można pracować na zewnątrz reszta

+0

działa w win7 x 64. Dzięki! – m1m1k

0

Aby zapobiec kasowanie katalogu foo spróbować katalog zmian do foo przed usunąć takie jak:

cd c: \ foo rd/s/qc: \ foo

Spowoduje to usunięcie wszystkich plików i folderów pod foo, ale NOT foo. Komunikat o błędzie zostanie wyświetlony w następujący sposób: "Proces nie może uzyskać dostępu do pliku, ponieważ jest używany przez inny proces."

1

spróbuje użyć PowerShell:

powershell -Command "Remove-Item '\foo\*' -Recurse -Force" 
Powiązane problemy