Usuwanie wszystkich plików, które nie pasują do określonego wzorca - wiersz poleceń systemu Windows


12

Usuwanie elementów za pomocą wiersza polecenia jest dość łatwe.

del /options filename.extension

Załóżmy teraz, że chcę usunąć wszystkie pliki, które nie kończą się na .jpg w folderze, jak mam to zrobić.

Chodzi o to, że mam oprogramowanie, które konwertuje wszystkie określone obrazy do formatu .jpg, ale pozostawia oryginały, których już nie potrzebuję.

O wiele bardziej wydajne byłoby wykonanie pojedynczej instrukcji w porównaniu do wykonywania wielu instrukcji dla każdego rodzaju pliku.

Odpowiedzi:


14

Zrobiłbym to w ten sposób:

attrib +r *.jpg
del /q *
attrib -r *.jpg

Spowoduje to, że wszystkie pliki JPG będą tylko do odczytu, usunie wszystko inne (automatycznie pominie pliki tylko do odczytu), a następnie sprawi, że pliki JPG będą ponownie zapisywane.


Pracował jak mistrz. Uwaga: wystarczy dodać /sdo każdej linii, aby rekurencyjnie dołączyć pliki do podkatalogów.
Chuck Wilbur

9

To właściwie całkiem proste.

Musisz foriterować pliki, a następnie po prostu szukać rozszerzenia:

for %f in (*) do if not %~xf==.jpg del "%f"

powinien zrobić lewę (kod tutaj ).


dzięki, ale to samo zależy od używanej mapy.
KdgDev,

4
Mapa?
Joey

Jak powiedzieć, jeśli nie .jpg, a nie .jsp i nie .xml, a następnie del?
użytkownik1164061,

1

Powershell na ratunek
W czasach systemu Windows 7/8 jest to następca starej dobrej linii poleceń

Del C:\myFolder\* -exclude '*.jpg'

Deljest pseudonimem dla Remove-Item. Ma kilka opcji, takich jak rekurencja, włączanie, wykluczanie i filtrowanie (użyj tego dla RegEx)

Musisz dodać, \*aby dołączyć pliki do danego folderu


Z wiersza CMD powinno to działać:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi

Uwaga: PowerShell jest dostarczany z Win 7/8. W przypadku systemu Windows XP lub Vista należy go pobrać i zainstalować.
Iszi

1

Wiem, że to nie odpowiada bezpośrednio na twoje pytanie, ale czy sprawdziłeś opcje konwertera, aby sprawdzić, czy:

  1. Może usunąć same oryginały

lub

  1. Zapisać plik .jpg w nowym folderze?

Nie mam bezpośredniej opcji, aby to zrobić. Spowoduje to zastąpienie oryginału, jeśli na początku był to plik JPG. Ale wszystkie pozostałe pozostają na dysku podczas tworzenia JPG z nich.
KdgDev

@WebDevHobo - no cóż, wybrałbym wtedy sugestię Johannesa.
ChrisF,

0

Szukałem sposobu, aby znaleźć wszystkie pliki, które NIE miały rozszerzenia „.mp3” w katalogu TREE na Windows 7 (wolumin NTFS) zawierającym może 20 000 plików w kilkuset katalogach o różnych głębokościach ... więc po odrobinie angst, użyłem:

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

wyświetlało to pliki, które nie pasowały do ​​.mp3 po usunięciu wszystkiego, co jest związane z wyjściem polecenia DIR ... 99% działa ... chyba że plik, który nie pasuje, jest nazwany jednym ze słów kluczowych w standardowym wyjściu DIR - być może istnieje sposób na to, aby raport DIR zawierał mniej informacji o nagłówkach / podsumowaniach - ale nie zawracałem sobie głowy tym, ponieważ dostało się to w większości przypadków.


najwyraźniej kod wysyłający tutaj usuwa niektóre znaki specjalne ... więc powyższe polecenie „cd” znajdowało się w wierszu i określało docelowy katalog główny, a pierwsze polecenie „find” usunęło wszystkie wiersze zawierające „<” DIR ”> „(idź rysunek), ponieważ jest to wynik polecenia dir - ale kod pocztowy tutaj może pomyśleć, że jest to jakaś meta-instrukcja i usuwa ją ...
CaptPat

1
Jest na to znacznie łatwiejszy sposób: /bflaga dirpolecenia. dir /bwyświetli nazwy plików i rozszerzenia tylko w bieżącym katalogu, dir /s /bwyświetli w pełni kwalifikowane nazwy wszystkich plików w bieżącym i wszystkich podkatalogach. Pipowanie do find /vzamiast forpętli jest miłym akcentem, który muszę pamiętać, ale nie sądzę, żeby to działało del.
Bob

0

Inny sposób usuwania wszystkich plików pasujących do nazwy pliku pokazano poniżej. Lista pętli for zawiera wszystkie pliki, a jeśli NIE jest zgodne z nazwą pliku (bez nazwy katalogu).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
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.