Wie lösche ich Dateien aus einem Ordner mit einer Liste von Dateinamen in Windows?

23

Ich habe einen Ordner mit 2K + Dateien, ich muss ungefähr 200 löschen, ich habe eine TXT-Datei mit allen zu entfernenden Dateinamen in einer Liste sortiert. Wie entferne ich die spezifischen Dateien aus dem Ordner mithilfe der Liste? (Betriebssystem ist Windows 7)

Avishking
quelle

Antworten:

18

Ein einfacher Weg ist, die txt-Datei in eine Datei zu kopieren, die im Verzeichnis der zu löschenden Dateien aufgerufen wird mydel.bat. Bearbeiten Sie diese Datei mit einem Editor wie Microsoft Word. Führen Sie ^pin Word normalerweise ein globales Ersetzen für Newline durch . Ersetzen Sie es durch space/f^pdelspace. Das wird sich ändern

File1.bin
File20.bin
File21.bin

to (bei /f"schreibgeschützte Dateien löschen erzwingen"):

File1.bin /f
del File20.bin /f
del File21.bin /f
del

Bearbeiten Sie die erste Zeile, um das delLeerzeichen hinzuzufügen und die letzte Zeile zu löschen.

Führen Sie den Stapelbefehl aus.

kingchris
quelle
Abgesehen von der / Y-Option, die in win7 del command anscheinend nicht funktioniert, funktionierte dies recht gut. Danke
Avishking,
2
Das ist wahrscheinlich /ffür "Nur-Lese-Dateien löschen erzwingen" anstatt /y.
afrazier
Richtiger Afrazier. Ich habe das / Y, das mit XCOPY und einem oder zwei anderen DOS-Programmen funktioniert, verwechselt, um die Aufforderung zur Bestätigung der Aktion zu unterdrücken
kingchris
In Editoren, die wissen, wie man mit regulären Ausdrücken sucht / ersetzt, wie z. B. Notepad ++, müssten Sie "^" durch "del" und "$" durch "/ f" ersetzen, wobei ^ den Anfang jeder Zeile darstellt und $ - das Ende.
Dan Mirescu
38

Geben Sie dies in die Befehlszeile ein und ersetzen Sie Ihre Datei durch files_to_delete.txt:

for /f %i in (files_to_delete.txt) do del %i

Eine Version, die in .cmdDateien eingeschlossen werden kann (double %%) und mit Leerzeichen in Dateinamen umgehen kann:

for /f "delims=" %%f in (files_to_delete.txt) do del "%%f"
William Jackson
quelle
1
Dies löschte tatsächlich die Dateiliste anstelle der Dateien selbst ... Ich musste die Liste neu erstellen: |
Avishking
4
Meine tiefste Entschuldigung. Ich habe die /fFlagge vergessen .
William Jackson
Das ist ziemlich geschickt, ich wusste nicht, dass die Befehlszeile solche Schleifen unterstützt. Möchten Sie einen Blogeintrag für das SU-Blog über diese und andere Feinheiten der Befehlszeile schreiben?
Ivo Flipse
1
@Ivo: Weitere Informationen erhalten Sie unter computerhope.com/batch.htm oder superuser.com/questions/tagged/batch . Ähnlich wie bei Unix kann vieles, was in Skripten (Batch-Dateien) ausgeführt werden kann, auch direkt über die Befehlszeile ausgeführt werden.
BlueRaja - Danny Pflughoeft
Ich habe eine Fledermausdatei erstellt und das zweite Beispiel kopiert: Ergebnis: Die Datei files_to_delete.txt wird noch entfernt. (auch mit der / f Flagge)
bvdb
18

Verwenden von PowerShell:

Get-Content c:\path\to\list.txt | Remove-Item
Siim K
quelle
1
Wow, das ist viel lesbarer als Batch.
TheLQ
Für zukünftige Leser ... Ich musste den Pipe-Operator auf a ändern >, damit dies funktioniert. Dh Get-Content c:\path\to\list.txt > Remove-Item... ich hatte volle UNC - Pfade in meinem list.txt. Hoffe das hilft.
NateJ
@NateJ Ich habe versucht, die zu verwenden, >und es wurde nur eine Datei für mich erstellt, anstatt Dinge zu löschen.
Brian J
@BrianJ hmm, ich muss nochmal nachschauen, was ich getan habe .. guter Fang.
NateJ
1

Ich kann mir vorstellen, dass dies mit Powershell möglich ist.

Da ich Perl kenne , benutze ich es eher für solche Dinge

perl -l -n -e "unlink" filenames.txt
RedGrittyBrick
quelle
1

Erste Methode funktioniert nach einigen Änderungen:

  1. Öffnen Sie den Editor
  2. Kopieren Sie alle Dateinamen mit Endung, die nach dem Hinzufügen delam Anfang gelöscht werden müssen, wie

    del File1.bin
    del File20.bin
    del File21.bin
    
  3. Speichern Sie die Datei xyz.batim selben Ordner

  4. Führen Sie die Datei aus
Hassan
quelle
2
... die Textdatei in der Frage enthält ungefähr 200 Dateinamen. Warum delmanuell hinzufügen, wie Sie es vorschlagen, während bereits Lösungen veröffentlicht wurden, um dies zu automatisieren? Übrigens: Jeder vernünftige Editor unterstützt das Suchen und Ersetzen von Zeilenenden (oder Zeilenanfängen mit regulären Ausdrücken), Makros oder die Bearbeitung im Block- oder Spaltenmodus (häufig durch Gedrückthalten von Option oder Alt und anschließendes Auswählen von a) Block, nach dem man einfach in mehrere Zeilen gleichzeitig tippen kann).
Arjan