Wie entpacke ich alle ZIP-Dateien in Unterordnern mit 7-Zip unter Windows 7

Wie entpacke ich alle ZIP-Dateien in Unterordnern mit 7-Zip unter Windows 7

Ich habe eine große Windows 7 Ordnerstruktur mit vielenREISSVERSCHLUSSDateien. Dies sind einschichtige ZIP-Dateien (kein ZIP innerhalb von ZIP). Welchen 7-Zip-Befehl kann ich verwenden, um diese Ordnerstruktur zu analysieren, jede ZIP-Datei anhand der Dateierweiterung zu finden (siehe Beispiel) und sie (durch Löschen der ZIP-Datei und Belassen der extrahierten Dateien) an denselben Speicherort zu extrahieren?

Beispiel: Alle Dateien in der Ordnerhierarchie haben Namen wie: abc.mp3.zip oder xyz.jpg.zip – die native Dateierweiterung gefolgt von „.zip“. Ich möchte, dass 7-Zip alle Dateien im Baum nach Dateierweiterung mit Platzhaltern (*.mp3.zip, *.jpg.zip usw.) findet und diese an den aktuellen Speicherort extrahiert, ohne neue Ordner zu erstellen, sodass das Ergebnis abc.mp3 und xyz.jpg ist.

Antwort1

Soweit ich weiß, hat 7-zip keinen Befehl, der das tut, was Sie suchen. Hier ist ein Windows-Batchdateiskript, das meiner Meinung nach das tut, was Sie wollen. Es sollte von der Befehlszeile aus ausgeführt werden, damit Sie einen Pfad zum Stamm des zu verarbeitenden Ordnerbaums angeben können.

Dateiunzipper.bat

@echo off
setlocal
if "%1"=="" goto Usage

call :Get7zCmd
:: Recurse folder passed in as paramater
for /r %1 %%Z in (*.zip) do (
    echo ====
    rem Change to the directory of zip file
    cd /d "%%~dpZ"
    rem Extract all files to current directory
    echo %_7zCmd% e "%%~nxZ" -y
    rem Delete the zip file
    echo del "%%~nxZ"
)
goto End

:Usage
echo.
echo Parses through folder structure starting at the specified path, finding
echo and extracting the contents of all zip files found, and then deletes
echo the zip file.
echo.
echo Usage:
echo     %~n0 root-directory-path
echo.
echo     For example:
echo.
echo %~n0 "D:\some folder"

:End
goto :EOF

:: ==========================
:: Subroutine Get7zCmd
:: Determines the full path to 7-zip command-line executable from the Windows
:: Registry and sets the variable "_7zCmd" to the result.
:Get7zCmd
set Reg.Key=HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe
set Reg.Val=Path
for /F "Tokens=2*" %%A in ('Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| find /I "%Reg.Val%"') do call set PathDirectory=%%B
set _7zCmd="%PathDirectory%%\7z.exe"
exit /b 0

Da das Skript insgesamt ziemlich radikal und potenziell destruktiv ist, weil es möglicherweise eine große Anzahl von Dateien extrahiert und anschließend viele Zip-Dateien löscht, habe ich die Befehle in den Zeilen 12 und 14, die diese Dinge tun würden, deaktiviert, indem ich ihnen das Präfix vorangestellt habe echo. Dadurch geben sie nur aus, was sie getan hätten, wenn das echonicht da gewesen wäre. Auf diese Weise können Sie das Skript zunächst testen, ohne Ihr Dateisystem zu beschädigen, falls unerwartete Probleme auftreten sollten.

Um das Skript so zu ändern, dass es diese Aktionen tatsächlich ausführt, müssen Sie echoin jeder der beiden Zeilen das entfernen. Natürlich gilt der Standard-Haftungsausschluss.

verwandte Informationen