[Batch] Usuwanie masowo plików


(Marcin Obala) #1

Cześć

 

Nigdy za bardzo nie bawiłem się w pliki bat. Dodatkowo nie chciałbym pisać takiego programu w C#. Chciałbym stworzyć taki plik BAT który w zadanym folderze, wyszuka wszystkie foldery o określonych nazwach (jest ich kilka) a następnie nie przejmując się czy coś w nich jest, po prostu je usunie. Dodatkowo jest pewien myk, próbując kiedyś zrobić to gotowym skryptem z netu prawie sobie usunąłem potrzebne dane. Jeden z folderów nazywa się Images natomiast drugi Images_Master. Tego drugiego nie mam prawa dotknąć. Niestety jak miałem taki skrypt to dopasowywał do Images również images_master. Może ktoś coś takiego kiedyś robił? 


(drunkula) #2

Jeżeli nazwy są konkretnie określone, to kasujesz je po kolei...

rmdir images /s /q
rmdir panienki /s /q
rmdir cukierki /s /q

Chyba że chcesz to jakoś skomplikować przez jakieś pętle czy odczyt nazw z jakiegoś źródła...

 

Images_master do images dopasował się pewnie przez użycie wildcarda ima* lub coś w tym guście


(lucas80) #3

Pokaż ten skrypt.


(nolokon) #4

Nie wiem jaki masz system operacyjny, ale w windows jest w "mój komputer" opcja szukaj , wpisujesz nazwę pliku i pokazuje Ci wszystko o podanej nazwie.


(Marcin Obala) #5

Jednak opcja szukaj najpierw szuka ok pół godziny (folder o którym mowa zawiera kilkadziesiąt milionów jak nie kilkaset milionów plików), później po zaznaczeniu folderów windows liczy sobie 4 godziny co ma do usunięcia (sprawdzałem i to naprawdę tyle trwa) i dopiero zaczyna. Batch olewa progress bary i zaczyna usuwać na bieżąco. Czyli jak mam telefon o 3 w nocy to wystarczy że się zaloguje, włączę skrypt i idę spać dalej. Z Windowsem ludzie stali by 5 godzin zanim by zaczął w ogóle cokolwiek usuwać. A tak to mogą pracować dalej, bo powolutku dostępność miejsca na dysku się zwiększa. 

 

Co do struktury to może to wyglądać tak:

Dysk -> Application -> Grupa -> Podgrupa -> images

Dysk -> Application -> Grupa -> Podgrupa -> images_master

Dysk -> Application -> Grupa -> images

Dysk -> Application -> Grupa -> images_master

 

dodatkowo grup jest może z 30 i w każdej grupie może być 5 folderów a może być ich 300. Raczej sobie nie wyobrażam pisać ręcznie usuwania folderów. 

 

Aktualnie mam inne rozwiązanie. Wiem co jest w folderach które chce usuwać. Żeby nie usunąć images master i tak używam wyszukiwarki w total comanderze. Z innych folderów z których chcę coś usunąć używam cmd i usuwam wszystkie pliki rekurencyjnie o podanych rozszerzeniach a następnie jest wywoływany inny skrypt który usuwa puste foldery które zostawiło polecenie del.


(somekind) #6

A musi być batch? W PS to po prostu ls -fi "images" -r | del -fo -r


(nolokon) #7

No tak


(somekind) #8

Gra w usuwanie plików?

A ja brain.dll


(nolokon) #9

Złe okienko :stuck_out_tongue:


(Grzelix) #10
@echo off
for /D /r %%d in (images) do rmdir /S /Q %%d

Spróbuj kod powyżej. Nie daję gwarancji więc zrób sobie testy gdzieś na boku. Ja uruchamiałem na win7 i działało to tak:

listuje wszystkie katalogi (z miejsca gdzie to odpalasz)

dokleja nazwę folderu images

próbuje usunąć - jeśli istnieje utworzona ścieżka usuwa, jeśli nie wypluwa warning.