Powershell pour supprimer tous les fichiers avec une certaine extension de fichier

21

Je veux scanner un répertoire (il n'y a pas de sous-marins) et supprimer tout fichier avec une extension de .avi J'ai essayé cette syntaxe, mais aucune erreur n'est levée et aucun fichier n'est supprimé. C'est le code que j'ai essayé

get-childitem 'C:\Users\ramrod\Desktop\Firefly' -include *.avi | foreach ($_) {remove-item $_.fullname}

Que faut-il modifier pour supprimer tous les .avifichiers du dossier?

user2676140
la source
3
Qu'est-ce qui vous empêche d'utiliser rm *.avi? (Oui, c'est une syntaxe PowerShell valide car rmc'est un alias de del.
GiantTree
2
Techniquement, rmet delsont tous deux des alias de l' Remove-Itemapplet de commande.
root

Réponses:

15

Utilisez del *.<extension>ou l'un de ses alias (comme rmsi vous êtes plus habitué à bash).

Il s'agirait donc del *.avide supprimer tous les fichiers se terminant .avidans le répertoire de travail courant.

Permet del <directory>\*.<extension>de supprimer des fichiers dans d'autres répertoires.

GiantTree
la source
14
Pour le faire récursivementls *.avi -Recurse | foreach {rm $_}
Kolob Canyon
11

En supposant la méthode préférée d'ouverture d'une instance Powershell dans le répertoire, une version générique serait la suivante:

Get-ChildItem *.avi | foreach { Remove-Item -Path $_.FullName }

Pour une version spécifique au répertoire:

Get-ChildItem -Path 'C:\Users\ramrod\Desktop\Firefly' *.avi | foreach { Remove-Item -Path $_.FullName }

Ajoutez -Recurseà Get-ChildItempour affecter tous les dossiers contenus.

Exemple:

Get-ChildItem *.avi -Recurse | foreach { Remove-Item -Path $_.FullName }
David Metcalfe
la source
2

Le Remove-Itemcommandlet devrait être tout ce dont vous avez besoin. Passez simplement le dossier racine où les fichiers avi existent et passez le recursedrapeau avec un filtre:

Remove-Item 'C:\Users\ramrod\Desktop\Firefly\*' -recurse -Include *.avi

Cela devrait s'exécuter plus rapidement que de rechercher les fichiers via Get-ChildItemet d'appeler Remove-Itempour chacun d'eux.

L'ajout du -WhatIfcommutateur vous invitera avant de supprimer chaque fichier, ce qui est plus sûr pour les personnes moins à l'aise avec PowerShell.

Keith Miller
la source
1
Je ne sais pas pourquoi cette réponse a été rejetée. Le -WhatIfcommutateur est inutile. J'ai soumis une modification à cette réponse. +1 Le Remove-Itemcommandlet est tout ce dont vous avez besoin et s'exécute plus rapidement que la réponse actuellement acceptée.
Greg Burghardt
C'est une bonne idée à utiliser -whatifpour vérifier que vous ne supprimerez que les fichiers que vous souhaitez supprimer. Et surtout lorsque vous offrez une commande de suppression à ceux dont l'expertise technique est inconnue. Mieux vaut garder les roues d'entraînement.
Keith Miller
0

Supposons qu'il y ait plusieurs fichiers texte dans le répertoire courant.
dir * -include *.txt& dir *.txttravailler comme prévu mais dir -include *.txtne donne rien. La raison est bien expliquée sur Stack Overflow .

Commande corrigée:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}

guest-vm
la source
0

Cela l'a finalement fait pour moi - essayé tout au-dessus et nada.

get-childitem "<drive>:\<folder>" -recurse -force -include *.<ext> | remove-item -force

bien sûr, deux forces ne sont pas nécessaires, mais c'est ce qui fonctionne, c'est donc ce avec quoi je m'en tiens.

visionmn2
la source
0

essaye ça

Remove-Item "c:\temp\*.txt" 
Esperento57
la source
1
hé là, cela ne semble pas supprimer les fichiers avi, et il ne semble pas non plus le faire depuis le dossier en question. Pourriez-vous améliorer cette réponse ou expliquer en quoi cela pourrait aider dans cette situation?
Sirex