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?


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.


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 }

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.


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 $_}


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.


0

essaye ça

Remove-Item "c:\temp\*.txt" 

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.