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.