Wie extrahiere ich alle Archive in den Unterverzeichnissen dieses Ordners?

18

Wie extrahiere ich mehrere Archive in Unterverzeichnissen in einem Ordner und gebe die Ergebnisse in die Ordner zurück, in denen sich die Archive befinden.

HopelessN00b
quelle

Antworten:

22

Installieren Sie zunächst 7-zip .

Erstellen Sie eine batDatei im Stammverzeichnis des Verzeichnisses, die viele Unterverzeichnisse mit darin enthaltenen Archiven enthält. Dann fügen Sie folgendes ein:

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\7-zip\7z.exe" x "%%X"
        )
    popd
)

Starten Sie die Fledermaus, und alle RARs / Zips werden in den Ordner extrahiert, in dem sie enthalten sind.

Wie funktioniert das?

FOR / D / r %% F in ("*") DO (

For-Schleife, um alle Ordner im aktuellen Verzeichnis zu durchlaufen und den Pfad in eine Variable einzufügen %%F.

pushd% CD%

Legen Sie das aktuelle Verzeichnis, in dem wir uns befinden, in den Speicher.

cd %% F

Legen Sie den Ordner aus der Variablen %%Fals aktuelles Verzeichnis fest.

FOR %%X in (*.rar *.zip) DO (

Führen Sie für alle rarund zipDateien im aktuellen Ordner folgende Schritte aus:

"C:\Program Files\7-zip\7z.exe" x "%%X"

Führen Sie 7-zip für die Dateien aus. Anführungszeichen sind erforderlich, %%Xda einige Dateinamen Leerzeichen enthalten.

popd

Kehren Sie zum vorherigen Verzeichnis zurück, das wir zuvor im Speicher gespeichert haben.

Hoffe, das ist nützlich für jemanden.

anon
quelle
3

Ich hatte Probleme beim Ausführen des Skripts unter Windows Vista. Als ich den Code lief, passierte nichts. Ich musste Administrator sein, um das Skript ausführen zu können. Wenn ich mit der rechten Maustaste auf die .bat-Datei geklickt habe und "als Administrator ausführen", hat es nicht funktioniert, weil es aus irgendeinem Grund im Ordner "system32" gestartet wurde (wenn ich mich richtig erinnere). Um dies zu lösen, verwenden Sie einfach die Windows-Umgebungsvariable (hier erklärt: Windows-Umgebungsvariablen )% ~ dp0, um zu dem Verzeichnis zurückzukehren, von dem aus das Skript ausgeführt wurde.

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x %%X
    )
popd
)

Stellen Sie sicher, dass sich keine * .rar- oder * .zip-Dateien auf derselben Ebene wie das Skript befinden. Sie sollten eine Ebene tiefer sein.

Ich hoffe dieser Kommentar hat jemandem geholfen.

Daniel P
quelle
Das hat gut funktioniert für mich. Ich musste den Pfad zu "C: \ Programme (x86)" von "C: \ Programme" ändern, da ich 64-Bit Win 7
ausführe
1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Startet eine rekursive Suche im aktuellen Verzeichnis, findet alle Dateien, die mit .zip enden, und leitet diese in eine Schleife weiter. Für jede gefundene Datei wird ein Dekomprimierungsbefehl für die Datei ausgeführt, wobei die Ausgabe in das Dateiverzeichnis verschoben wird.

Curtis Tasker
quelle
1

Die obigen Antworten funktionieren jedoch, wenn Sie ausgeführt werden Windows 64-bitund 7-Zip 32-bitder richtige Pfad C:\Program Files (x86)\7-Zipfür 7-Zip ist. Unten ist das Skript, das für mich funktioniert hat.

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files (x86)\7-zip\7z.exe" x %%X
    )
    popd
)
Ryan
quelle
Wenn Sie jedoch über die 64-Bit-Version von 7zip verfügen, lautet der richtige Pfad: "C: \ Programme \ 7-zip \ 7z.exe", wie in der ursprünglichen Antwort angegeben.
Rohn Adams