Suppression de tous les fichiers qui ne correspondent pas à un certain modèle - ligne de commande Windows

12

La suppression d'éléments via la ligne de commande est assez simple.

del /options filename.extension

Supposons maintenant que je souhaite supprimer tous les fichiers qui ne se terminent pas par .jpg dans un dossier, comment dois-je procéder.

Le truc, c'est que j'ai un logiciel qui convertit toutes les images spécifiées en .jpg, mais il laisse les originaux, dont je n'ai plus besoin.

Il serait beaucoup plus efficace d'exécuter une seule instruction que de faire plusieurs instructions pour chaque type de fichier différent.

KdgDev
la source

Réponses:

14

Je le ferais comme ça:

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

Cela rendra d'abord tous les fichiers JPG en lecture seule, supprimera tout le reste (il ignorera automatiquement les fichiers en lecture seule), puis rendra les fichiers JPG inscriptibles à nouveau.

bobbymcr
la source
A fonctionné comme un champion. Remarque: ajoutez simplement /sà chaque ligne pour inclure récursivement les fichiers dans les sous-répertoires.
Chuck Wilbur
9

C'est en fait assez simple.

Vous devrez forparcourir les fichiers et rechercher simplement l'extension:

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

devrait faire l'affaire (code ici ).

Joey
la source
merci, mais cela dépend de la carte que j'utilise.
KdgDev
4
Carte?
Joey
Comment puis-je dire si ce n'est pas .jpg et pas .jsp et pas .xml puis del?
user1164061
1

Powershell à la rescousse
A l'époque de Windows 7/8 c'est le successeur de la bonne vieille ligne de commande

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

Delest un alias pour Remove-Item. Il a plusieurs options comme recurse, include, exclude et filter (utilisez ceci pour RegEx)

Vous devez ajouter \*pour inclure des fichiers dans un dossier donné

nixda
la source
À partir de l'invite CMD, cela devrait fonctionner:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi
Remarque: PowerShell est livré avec Win 7/8. Pour Windows XP ou Vista, vous devez le télécharger et l'installer.
Iszi
1

Je sais que cela ne répond pas directement à votre question, mais avez-vous examiné les options de votre convertisseur pour voir si:

  1. Il peut supprimer les originaux eux-mêmes

ou

  1. Écrire les .jpg dans un nouveau dossier?
ChrisF
la source
Je n'ai pas l'option directe de le faire. Ce qu'il fera, c'est écraser l'original s'il s'agissait au départ d'un JPG. Mais tous les autres restent sur le disque pendant qu’un JPG est créé.
KdgDev
@WebDevHobo - eh bien, j'irais avec la suggestion de Johannes alors.
ChrisF
0

Je cherchais un moyen de trouver tous les fichiers qui n'avaient PAS l'extension ".mp3" dans un répertoire TREE sur Windows 7 (volume NTFS) contenant peut-être 20 000 fichiers dans plusieurs centaines de répertoires de différentes profondeurs ... donc après un peu de angoisse, j'ai utilisé:

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

cela répertorie les fichiers qui ne correspondent pas au .mp3 après avoir supprimé tout ce qui concerne la sortie de la commande DIR ... 99% fonctionne ... sauf si le fichier qui ne correspond pas est nommé l'un des mots clés dans la sortie DIR standard - il y a peut-être un moyen de rendre le rapport DIR moins d'informations d'en-tête / récapitulatif - mais je n'ai pas pris la peine car cela arrivait la plupart du temps.

CaptPat
la source
apparemment, le code de publication ici supprime certains caractères spéciaux ... de sorte que la commande "cd" ci-dessus était sur une ligne seule et a spécifié le répertoire racine cible, et la première commande "find" a supprimé toutes les lignes contenant "<" DIR "> "(allez comprendre) puisque c'est la sortie de la commande dir - mais le code postal ici peut penser que c'est une sorte de méta-instruction et la
supprime
1
Il existe un moyen beaucoup plus simple de le faire: le /bdrapeau de la dircommande. dir /brépertorie les noms de fichiers et les extensions dans le répertoire actuel uniquement, dir /s /brépertorie les noms complets de tous les fichiers dans le sous-répertoire actuel et dans tous les sous-répertoires. Tuyau à la find /vplace d'une forboucle est une belle touche dont je dois me souvenir, mais je ne pense pas que cela fonctionne del.
Bob
0

Une autre façon de supprimer tous les fichiers correspondant à un nom de fichier est indiquée ci-dessous. La liste des boucles for contient tous les fichiers et if NOT correspond par nom de fichier (sans nom de répertoire).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
ajuffinger
la source