Löschen Sie alle Dateien aus einem Ordner und seinen Unterordnern


52

Ich möchte alle Dateien aus einer Ordnerstruktur entfernen, daher verbleibt eine leere Ordnerstruktur.

Kann dies in Batch- oder VBScript- Skripten erreicht werden?

Ich habe einen sehr einfachen Batch-Befehl ausprobiert, aber dazu musste der Benutzer das Löschen jeder Datei zulassen. Dies war keine geeignete Lösung, da es viele hundert Dateien gibt, die mit der Zeit erheblich zunehmen werden.

Was können Sie vorschlagen?


Du meinst ein rekursives Löschen? Dies kann in der Tat getan werden. Etwas wie rd /s /q "c:\folder awird eine rekursive Löschung aller Dateien und Ordner innerhalbFolder A
Ramhound

Ich weiß nicht, wie man ein Skript in Powershell erstellt, habe aber zuvor Powershell-Skripte ausgeführt.
BobJim

2
Jetzt ist ein perfekter Zeitpunkt zum Lernen, ich würde die Batch- und VBS-Syntax für ältere Zwecke untersuchen, aber mehr Zeit in das Erlernen von PS investieren.
MDMoore313

Ich hatte noch keine Gelegenheit, den Code zu überprüfen, obwohl ich mir sicher bin, dass er funktionieren wird. Ich werde zurückkommen und die am besten geeignete Antwort auf meine erste Anfrage auswählen.
BobJim

Ich werde @ BigHomies Empfehlung folgen - ich habe gerade PowerShell gelernt und muss sagen, dass es ziemlich ordentlich ist - nicht zu schwer, eine gute Waffe im Arsenal eines jeden Programmierers. Ich benutze es jetzt ziemlich häufig.
Ben

Antworten:


75

Dies kann mit PowerShell erreicht werden :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

Dieser Befehl ruft jedes untergeordnete Element auf $path, führt die Löschmethode für jedes Element aus und ist recht schnell. Die Ordnerstruktur bleibt erhalten.

Wenn Sie Dateien ohne Erweiterung haben, verwenden Sie

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

stattdessen.

-FileMöglicherweise wurde der Parameter nach PowerShell v2 hinzugefügt. Wenn das der Fall ist, dann

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

Es sollte den Trick für Dateien tun, die eine Erweiterung haben.

Wenn dies nicht funktioniert, prüfen Sie , ob Sie über eine aktuelle Version von Powershell verfügen


1
Es ist -Include *.*kein -Include .großer Unterschied! :-)
MDMoore313

Get-ChildItem -Path D: \ EmptyThisFolder -Include . -Datei -Recurse | foreach {$ _. Delete ()}
BobJim

Warum benutzt du -Include .? Das ist das Problem.
MDMoore313

2
Können sie nicht umsetzen powershell --version? Können sie keine Versionsnummer mit positiven Ziffern verwenden? Es ist nur verrückt. Mehr als 1300 Stimmen für eine Frage, wie man die Versionsnummer eines Programms herausfindet?
Thomas Weller

1
@demonicdaron soll es nicht; Die Frage des OP bestand darin , die Ordnerstruktur beizubehalten.
MDMoore313

24

Kurz und Suite PowerShell. Ich bin mir nicht sicher, mit welcher der niedrigsten PS-Versionen es funktionieren wird.

Remove-Item c:\Tmp\* -Recurse -Force

2
Schön und leicht. Dies hat den Trick getan, während die akzeptierte Antwort dies nicht tat!
Demonicdaron

Dies sollte die akzeptierte Antwort sein, Sie können sie sogar einfach eingeben, rm *da es nicht wirklich ratsam ist, sie zu erzwingen (das Bestätigungsdialogfeld enthält ohnehin die Option "Ja zu allen").
J Garcia

22

Sie können dies mit dem delBefehl tun :

dir C:\folder
del /S *

Der /SSchalter dient zum rekursiven Löschen von Dateien.


2
Wird dies nur Dateien löschen, aber die Ordner verlassen?
BobJim

5
Ja. Sie können eine /POption hinzufügen, sodass Sie aufgefordert werden, jedes Löschen zu bestätigen, um dies zu überprüfen.
Phoops

Vielen Dank, ich werde es versuchen! hoffentlich viel Zeit sparen!
BobJim

3
Ja. Zum Löschen von versteckten Dateien und Systemdateien müssen Sie attrib -s -r -h Folder\*.* /s /dvor dem Löschen vorgehen. Und für Berechtigungen verwenden Sie den takeownBefehl.
Jet

2
Und Sie können / Q verwenden, um bei Verwendung von Platzhaltern KEINE Bestätigung anzufordern.
Aylatan

4

Wenn ich zwischen den Zeilen Ihrer ursprünglichen Frage lese, kann ich eine alternative BATCH-Codezeile anbieten, die Sie verwenden können. Beim Ausführen werden nur Dateien gelöscht, die älter als 60 Tage sind. Auf diese Weise können Sie dies in eine geplante Aufgabe einfügen, und wenn sie ausgeführt wird, werden die überschüssigen Dateien gelöscht, die Sie nicht benötigen, anstatt das gesamte Verzeichnis wegzublasen. Sie können 60 bis 5 Tage oder sogar 1 Tag ändern, wenn Sie wollten. Hiermit werden keine Ordner gelöscht.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

Vielen Dank für die Idee, aber derzeit denke ich, dass der "Entleerungs" -Prozess in einem sehr ungeplanten Ad-hoc-Zeitrahmen abgeschlossen sein wird. Ich werde diesen Code jedoch für die Zukunft aufbewahren! Prost
BobJim

Der Titel lautet "Alle Dateien aus einem Ordner und seinen Unterordnern löschen", daher ist dies keine Lösung.
Anders Lindén


3

Verwenden Sie PowerShell, um eine einzelne Datei oder einen Ordner zu löschen. Bevor wir den Befehl Löschen in Powershell ausführen, müssen wir sicherstellen, dass Sie auf dem Server oder PC mit einem Konto angemeldet sind, das uneingeschränkten Zugriff auf die zu löschenden Objekte hat.

Mit Beispiel: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

Verwenden von PowerShell-Commnads zum Löschen einer Datei

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

Mit dem obigen Befehl wird die Datei "DummyfiletoDelete.txt" ausgeführt und gelöscht, die sich im Verzeichnis "C: \ dotnet-helpers" befindet.

Verwenden von PowerShell-Commnads zum Löschen aller Dateien

Remove-Item -Path "C: \ dotnet-helpers *. *"

Verwenden von PowerShell-Commnads zum Löschen aller Dateien und Ordner

Remove-Item -Path "C: \ dotnet-helpers *. *" -Recurse

-recurseDrilldown und findet viel mehr Dateien. Mit diesem –recurseParameter kann PowerShell untergeordnete Elemente entfernen, ohne um Erlaubnis zu bitten. Darüber hinaus kann der Parameter –force hinzugefügt werden, um versteckte oder schreibgeschützte Dateien zu löschen.

Verwenden des Befehls -Force zum erzwungenen Löschen von Dateien

Verwenden des PowerShell-Befehls zum erzwungenen Löschen aller Dateien

Remove-Item -Path "C: \ dotnet-helpers *. *" -Force


1

Versuchen Sie dies mit PowerShell. In diesem Beispiel möchte ich alle .class-Dateien löschen:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. Wählen Sie im Windows Explorer das Stammverzeichnis mit allen Dateien und Ordnern.

  2. Suchen nach *

  3. Nach Typ sortieren (Alle Ordner befinden sich oben und alle Dateien darunter)

  4. Wählen Sie alle Dateien aus und drücken Sie Löschen.

Dadurch werden alle Dateien gelöscht und die Verzeichnisstruktur beibehalten.


1

Löschen Sie alle Dateien aus dem aktuellen Verzeichnis und den Unterverzeichnissen, ohne die Ordnerstruktur zu verlassen.

Mit dem /QSchalter ( ) wird der Benutzer gefragt, ob er löschen darf

Achtung : Probieren Sie es aus, ohne /Qsicherzustellen, dass Sie nichts Wertvolles löschen.

del /S * /Q 

1

Dies ist der einfachste Weg, IMO

Öffnen Sie PowerShell, navigieren Sie zu dem Verzeichnis ( cd), DANN

ls -Recurse * | rm

(Poof) alles ist weg ...

Wenn Sie basierend auf einer bestimmten Erweiterung löschen möchten

ls -Recurse *.docx | rm

ls listet das Verzeichnis auf

-Recurse ist eine Flagge, die Powershell anweist, in Unterverzeichnisse zu wechseln

* sagt alles

*.doc alles mit .doc extension

| Zuführung der Ausgabe von links nach rechts

rm löschen

Alle anderen Antworten scheinen dies verwirrender als nötig zu machen.


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

Als Ergänzung zu den obigen Antworten ist es nicht erforderlich, das Get-Childitem zu verwenden und das Ergebnis in den obigen Antworten an die Pipeline zu übergeben, da das Schlüsselwort -Include im Befehl Remove-Item enthalten ist

Man kann einfach:

Remove-Item -Include " . " "C: \ Temp" -Recurse

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.