Jak utworzyć plik wsadowy, który usunie rekursywnie wszystkie foldery o nazwie `bin` lub` obj`?


31

Mam potrzebę usunięcia wszystkich folderów bini objfolderów z folderu na komputerze. Tak więc myślę o pliku wsadowym, aby to zrobić, ale nie jestem zaznajomiony z plikiem wsadowym w systemie Windows. Proszę pomóż.

[Edytować]

Po dyskusji z użytkownikiem DMA57361dotarłem do aktualnego rozwiązania (wciąż mam problem, zobacz nasze komentarze):

Utwórz plik .bat i wklej poniższe polecenie:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

LUB

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: Po uruchomieniu skryptu pojawia się następujący błąd. Dowolny pomysł?

alternatywny tekst


@Nam - dlaczego biegasz - dlaczego for \/d \/r ...podwójne ukośniki zamiast for /d /r ...? I uruchomienie „pełnej” wersji /qna końcu - jak twierdzę - usuwa wszystko bez ostrzeżenia, więc nie zwraca danych wyjściowych (tzn. Nie mówi ci, kiedy to działa, tylko gdy ma błąd), czy jesteś pewien, że drugi uruchomić powyżej nie działa poprawnie?
DMA57361

@Nam ten przebieg również nie jest taki sam - na obrazie, od którego zaczyna się twoje polecenie, for / %d in a nie for /d /r . %d in- musisz użyć całego polecenia poniżej, każdy bit ma inną funkcję i jest ważny.
DMA57361

@Nam Opps, przepraszam, masz całkowitą rację, nie drukuje pierwszych kilku przełączników! Jednak nie rzuca tego błędu i wydaje mi się, że działa poprawnie. Czy próbowałeś po prostu uruchomić polecenie z wiersza polecenia, zamiast próbować uruchomić je z pliku wsadowego?
DMA57361

Hmm, jakie to dziwne. Być może twój Win7 robi coś innego z partią w porównaniu do mojego WinXP, więc nie jestem pewien co. Będę mógł wieczorem sprawdzić Win7 w domu, w przeciwnym razie obawiam się, że utknąłem w tej chwili ...
DMA57361,

W rzeczywistości spróbuj poprzedzić komendę wsadową znakiem starti sprawdź, co się stanie. Nie jest to idealne, ale zastanawiam się, czy to może pomóc.
DMA57361,

Odpowiedzi:


42

Odpowiedź na to pytanie została poprzednio omówiona w Stack Overflow, gdzie właśnie wziąłem główny wątek tej odpowiedzi.

Wypróbuj następujące polecenie, możesz je uruchomić od wewnątrz cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

Jeśli potrzebujesz zmienić inne foldery, po prostu dodaj nowe elementy do (bin,obj)zestawu w środku polecenia.

Spowoduje to usunięcie wszystkiego dopasowanego bez ostrzeżenia i bez używania kosza - więc jeśli chcesz trochę większego bezpieczeństwa, porzuć /qrozmowę rdna końcu, a system powinien pytać cię przed każdym usunięciem.

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

Jeśli zamierzasz uruchomić polecenie z poziomu pliku wsadowego , trzeba będzie zastąpić wszystkie wystąpienia zmiennej %dz %%d, tak jak poniżej:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

Jak na konwersję miał w pytaniu komentarze

Jeśli polecenie odmawia uruchomienia w pliku wsadowym (nie można go tutaj replikować), spróbuj poprzedzić go poleceniem start. Chociaż spowoduje to uruchomienie procesu równoległego z plikiem wsadowym, co może powodować inne problemy, wydaje się, że bardziej prawdopodobne jest prawidłowe działanie.

Ponadto, jeśli masz pliki o nazwach objlub binw drzewie folderów, nad którym pracuje polecenie, otrzymasz komunikat o błędzie dla każdego napotkanego pliku o pasującej nazwie. Te dopasowane pliki nie są usuwane i nie powinny przeszkadzać w usuwaniu tego, co powinno. Innymi słowy, można je bezpiecznie zignorować.


1
Czy wiesz, jak mogę zignorować jeden folder w tym folderze głównym, w którym uruchamiam to polecenie?
Goran Obradovic

Działa idealnie! Dzięki! +1
khr055


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.