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.