42 votes

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

Je veux scanner un répertoire (il n'y a pas de sous-répertoires) et supprimer tout fichier avec une extension .avi. J'ai essayé cette syntaxe, mais aucune erreur n'est générée, et aucun fichier n'est supprimé. Voici 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 fichiers .avi du dossier?

28voto

lucasdigital Points 31

En supposant que la méthode préférée pour ouvrir une instance Powershell dans le répertoire est 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-ChildItem pour affecter tous les dossiers contenus.

Exemple:

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

23voto

GiantTree Points 963

Utilisez del *. ou l'un de ses alias (comme rm, si vous êtes plus habitué à bash).

Donc ce serait del *.avi pour supprimer tous les fichiers se terminant par .avi dans le répertoire de travail actuel.

Utilisez del \*. pour supprimer des fichiers dans d'autres répertoires.


AVERTISSEMENT : Les deux del *. et del \*. supprimeront d'autres extensions qui correspondent au motif. Ces fichiers ne sont pas envoyés à la Corbeille.

Exemple : del *.doc* supprime *.doc, *.docm et *.docx. Le del \*. fonctionne de manière similaire.

18voto

Keith Miller Points 6004

Le Cmdlet Remove-Item devrait être tout ce dont vous avez besoin. Il vous suffit de passer le dossier racine où se trouvent les fichiers avi et de passer le paramètre -Recurse ainsi qu'un filtre :

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

Cela devrait s'exécuter plus rapidement que de trouver les fichiers via Get-ChildItem et d'inviter Remove-Item pour chacun.

  • Ajouter l'option -WhatIf listera les éléments qui seraient supprimés, mais la suppression réelle n'est pas effectuée.
  • Ajouter l'option -Confirm vous demandera confirmation avant de supprimer chaque fichier, ce qui est plus sûr pour les personnes moins à l'aise avec PowerShell.

0voto

guest-vm Points 3164

Suppose there are several text files in current directory.
dir * -include *.txt & dir *.txt work as expected but dir -include *.txt gives nothing. The reason is well explained on Stack Overflow.

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

0voto

Vlad Points 23

Cela a finalement fonctionné pour moi - j'ai essayé tout ce qui précède et nada.

get-childitem ":\" -recurse -force -include *. | remove-item -force

certes, deux -force ne sont pas nécessaires mais c'est ce qui fonctionne alors c'est ce avec quoi je reste.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X