UPDATE: Mir ist aufgefallen, dass viele Leute diesen Thread sehen, was mich glauben lässt, dass diese Situation doch nicht so selten ist. Wie auch immer, ich hatte so eine ähnliche / verwandten Fragen gestellt auf hier , was ziemlich anständig Lösungen zu hat , die das Problem in einer besseren Art und Weise lösen könnte.
Auf meinem Windows 7-Computer habe ich ein Verzeichnis mit heruntergeladenen Speicherauszügen in ZIP-Archiven. Jedes Archiv enthält wenige Textdateien, PDFs und selten XML-Dateien. Ich möchte den gesamten Inhalt jedes ZIP-Archivs in den entsprechenden Ordner extrahieren (muss während des Vorgangs erstellt werden), während das Extrahieren von PDFs verworfen bzw. ignoriert wird. Nach dem Extrahieren der erforderlichen Dateien aus einem Archiv darf die verarbeitete Zip-Datei nicht gelöscht werden (oder ich möchte wissen, wie ich sie in verschiedenen Situationen steuern kann).
Wenn dies hilfreich ist, liegt die Anzahl der Archive im Verzeichnis im Bereich von 60.000 bis 70.000. Außerdem benötige ich separate Ausgabeverzeichnisse, da Dateien in einem Archiv möglicherweise dieselben Namen haben wie Dateien in anderen.
Zum Beispiel,
- Ich habe alle meine Archive wie
one.zip
,two.zip
, .. in, sagen wir,D:\data
- Ich erstelle einen neuen Ordner für verarbeitete Daten, sagen wir
D:\extracted
- Nun sollten die Daten von
D:\data\one.zip
zu gehenD:\extracted\one
. HierD:\extracted\one
sollte automatisch angelegt werden. - Während dieses vollständigen Dekomprimierungsvorgangs sollten nicht alle gefundenen PDF-Dateien extrahiert (ignoriert) werden. Es hat keinen Sinn, zu extrahieren und dann zu löschen.
- (Optional) Eine Protokolldatei sollte, sagen wir, aufrechterhalten werden
D:\extracted
. Diese Datei soll verwendet werden, um die Verarbeitung an der Stelle fortzusetzen, an der sie im Fehlerfall belassen wurde. - (Optional) Mit dem Skript kann ich entscheiden, ob ich Quellarchive behalten oder nach der Verarbeitung löschen möchte.
Ich habe bereits nach einer Lösung gesucht, aber keine gefunden. Ich bin auf ein paar Fragen wie diese gestoßen
- Entpacken Sie rekursiv die Dateien, in denen sie sich befinden, und löschen Sie die Archive
- 7 Zip-Extrakt rekursiv
- Ist es möglich, Zip-Datei-Inhalte mit 7 Zip rekursiv aufzulisten, ohne sie zu extrahieren?
aber sie halfen nicht viel (ich bin übrigens kein Windows-Profi). Ich bin offen für die Installation von sicherer und werbefreier Software von Drittanbietern (Open Source) wie 7-zip.
BEARBEITEN: Gibt es ein Tool, mit dem ich das tun kann, was ich brauche ? Ich habe Multi Unpacker bereits ausprobiert . Es werden keine neuen Verzeichnisse erstellt und * .pdf-Dateien können nicht ignoriert werden. Es beginnt sogar langsam, ich denke, es liest zuerst alle Archive an der Quelle, bevor es mit der Verarbeitung beginnt.
Danke im Voraus!
Antworten:
Wenn Sie die hier gefundene Antwort ändern , sollte dieses Teil des PowerShell-Skripts tun, was Sie wollen. Einfach als Datei mit der Endung ".ps1" speichern. Wenn Sie es aufrufen, rufen Sie es einfach als ./filename.ps1 auf und es extrahiert die Dateien in separate Ordner, löscht die ZIP-Dateien und entfernt alle Dateien mit der Erweiterung .pdf. Ich habe nicht getestet, ob es mit rekursiven Pfaden richtig funktioniert, aber es sollte, testen Sie es bitte.
Bearbeiten: Wenn Sie nicht möchten, dass Ihre ZIP-Dateien gelöscht werden, entfernen Sie die Zeile oder kommentieren Sie sie aus (#)
rmdir -Path $_.FullName -Force
Anforderungen: PowerShell, 7-zip und Sie können den 7-zip-Pfad in der Datei festlegen.
quelle
set-ExecutionPolicy Unrestricted
in PowerShell als Administrator auszuführen . Ich habe beide ausprobiert und sie haben funktioniert, obwohl die erste die bessere Wahl ist, aber aus dem Umfang dieses Kommentars heraus, um zu erklären, warum.$arguments=@("e",
mit$arguments=@("x",
sollte Verzeichnisstruktur erhalten, testen Sie bitte , dass. Über das rekursive Extrahieren weiß ich nicht, ob es so richtig funktioniert, aber Sie können das Skript selbst mit einem neuen Verzeichnis aufrufen, in diesem Fall mit jedem Unterverzeichnis. Befindet sich eine Zip-Datei im Stammverzeichnis des Ordners, wird sie entpackt. Andernfalls wird es viel komplizierter. Ich bin allerdings nicht gut genug mit Powershell.