Usuń zduplikowane pliki za pomocą pliku wsadowego systemu Windows

4

Mam program, który automatycznie kopiuje pliki do katalogu, a jeśli utworzy duplikat, nazwie go tak:

file with duplicate.xxx
file with duplicate - 1.xxx
file with duplicate - 2.xxx

Potrzebuję sposobu na usunięcie wszystkich duplikatów za pomocą pliku wsadowego systemu Windows.

Coś w stylu:

FOR %f IN (C:\files\*.*) DO del "%f - 1"

To jednak nie zadziała, ponieważ rozwiązałoby to problem file with duplicate - 1.xxx - 1

Chris Sobolewski
źródło
a) Spróbuj przejść do katalogów przez / r. b)% ~ nf zamiast% f otrzyma nazwę pliku bez rozszerzenia
barlop

Odpowiedzi:

4

Jeśli chcesz usunąć wszystkie pliki o nazwie, która kończy się na - ?, oznacza to, że byłeś blisko.

Spróbuj tego:

FOR %%f IN ("C:\files\* - ?.*") DO del "%%f"

Będziesz musiał podwoić znaki procentu, jeśli uruchamiasz go z pliku wsadowego. I przetestuj za pomocą echozamiast delpierwszego.

Hydaralny
źródło
Zastanawiałem się nad tym, masz absolutną rację ... nie ma powodu, aby opierać się na oryginalnej nazwie pliku, gdy wszystkie duplikaty mają zagwarantowane, że kończą się na „- [jakaś liczba]”. Chociaż nie wiedziałem o tym? selektor ... czy pliki wsadowe akceptują wyrażenie regularne?
Chris Sobolewski
Pliki wsadowe @Chris nie akceptują wyrażeń regularnych, * nie jest wyrażeniem regularnym *, a? nie jest wyrażeniem regularnym? prawdopodobnie nie tyle majstrowałeś przy wyrażeniach regularnych. a * b, jeśli byłoby wyrażeniem regularnym, pasowałoby do b, ponieważ * w wyrażeniu regularnym dopasowuje 0 lub więcej znaków przedtem. W cmd * i? są bardziej intuicyjne, * oznacza dowolną sekwencję char, a? oznacza jeden znak
barlop
@Chris Sobolewski, regex? Chciałbym. :) To proste symbole wieloznaczne, * dla dowolnej liczby dowolnej postaci,? dla dowolnego pojedynczego znaku.
Hydaral,
@Chris ponadto, myślę, że możesz pominąć cały FOR i po prostu wykonać DEL. Ponieważ DEL może przyjmować symbole wieloznaczne. Co ciekawe, DEL ma nawet przełącznik / S, więc jeśli chcesz przechodzić przez podkatalogi, nie potrzebujesz nawet FOR / R.
barlop
3

Nie ma potrzeby FOR, delmoże akceptować symbole wieloznaczne. Próbować:

del "c:\files\* - 1.xxx"

Dopasuje wszystko z sufiksem „- 1.xxx” w katalogu.

Windos
źródło