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 echo
nicht 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 echo
in jeder der beiden Zeilen das entfernen. Natürlich gilt der Standard-Haftungsausschluss.