Powershell zum Löschen aller Dateien mit einer bestimmten Dateierweiterung

21

Ich möchte ein Verzeichnis scannen (es gibt keine Subs) und eine Datei mit der Erweiterung löschen. .avi Ich habe diese Syntax ausprobiert, aber es werden keine Fehler ausgegeben und keine Dateien gelöscht. Dies ist der Code, den ich ausprobiert habe

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

Was sollte geändert werden, um alle .aviDateien aus dem Ordner zu löschen ?

user2676140
quelle
3
Was hindert Sie daran rm *.avi? (Ja, das ist eine gültige PowerShell-Syntax, da rmes sich um einen Alias ​​von handelt del.
GiantTree
2
Technisch gesehen rmund delsind beide Aliase des Remove-ItemCmdlets.
Wurzel

Antworten:

15

Verwenden Sie del *.<extension>oder einen seiner Aliase (wie rm, wenn Sie eher daran gewöhnt sind, zu schlagen).

Es wäre also del *.avi, alle Dateien zu löschen, die im .aviaktuellen Arbeitsverzeichnis enden .

Verwenden Sie del <directory>\*.<extension>diese Option, um Dateien in anderen Verzeichnissen zu löschen.

GiantTree
quelle
13
Um dies rekursiv zu tunls *.avi -Recurse | foreach {rm $_}
Kolob Canyon
11

Unter der Annahme der bevorzugten Methode zum Öffnen einer Powershell-Instanz im Verzeichnis wäre eine generische Version wie folgt:

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

Für eine verzeichnisspezifische Version:

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

Hinzufügen -Recursezu Get-ChildItem, um alle enthaltenen Ordner zu beeinflussen.

Beispiel:

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

Das Remove-ItemCommandlet sollte alles sein, was Sie brauchen. Übergeben Sie einfach den Stammordner, in dem sich die AVI-Dateien befinden, und übergeben Sie das recurseFlag zusammen mit einem Filter:

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

Dies sollte schneller ausgeführt werden, als die Dateien über zu finden Get-ChildItemund Remove-Itemfür jede aufzurufen .

Wenn Sie den -WhatIfSchalter hinzufügen, werden Sie aufgefordert, jede Datei zu löschen. Dies ist sicherer für Benutzer, die mit PowerShell weniger vertraut sind.

Keith Miller
quelle
1
Ich bin mir nicht sicher, warum diese Antwort abgelehnt wurde. Der -WhatIfWechsel ist nicht erforderlich. Ich habe diese Antwort bearbeitet. +1 Das Remove-ItemCommandlet ist alles, was Sie brauchen, und läuft schneller als die aktuell akzeptierte Antwort.
Greg Burghardt
Es ist eine gute Idee, um -whatifzu überprüfen, ob Sie nur die Dateien entfernen, die Sie entfernen möchten. Und vor allem, wenn Sie Personen mit unbekanntem technischen Fachwissen einen Löschbefehl anbieten. Am besten die Stützräder eingeschaltet lassen.
Keith Miller
0

Angenommen, das aktuelle Verzeichnis enthält mehrere Textdateien.
dir * -include *.txt& dir *.txtarbeite wie erwartet aber dir -include *.txtgebe nichts. Der Grund ist im Stapelüberlauf gut erklärt .

Korrigierter Befehl:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}

Gast-vm
quelle
0

Das hat es endlich für mich getan - alles oben versucht und nada.

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

Sicher, zwei Kräfte sind nicht erforderlich, aber genau das funktioniert, also bleibe ich dabei.

visionmn2
quelle
0

Versuche dies

Remove-Item "c:\temp\*.txt" 
Esperento57
quelle
1
Hey, dies scheint keine AVI-Dateien zu entfernen, und es scheint auch nicht aus dem fraglichen Ordner zu tun. Könnten Sie diese Antwort verbessern oder erklären, wie sie in dieser Situation helfen könnte?
Sirex