Comment puis-je extraire tous les fichiers ZIP dans les sous-dossiers à l'aide de 7-Zip sur Windows 7

J'ai une grande arborescence de dossiers Windows 7 contenant de nombreux fichiers ZIP . Ce sont des fichiers ZIP à une seule couche (pas ZIP dans ZIP). Quelle commande 7-Zip puis-je utiliser pour analyser cette structure de dossier, trouver le fichier ZIP par extension de fichier (voir l'exemple), l'extraire (supprimer le fichier ZIP, laisser les fichiers extraits) au même emplacement?

Exemple: Tous les fichiers dans la hiérarchie des dossiers sont nommés comme: abc.mp3.zip ou xyz.jpg.zip – l'extension de fichier native suivie de ".zip". Je veux que 7-Zip trouve tous les fichiers dans l'arborescence par extension de fichier à l'aide de caractères génériques (* .mp3.zip, * .jpg.zip, etc.) et extrayez-les à l'emplacement actuel sans créer de nouveaux dossiers afin que le résultat soit abc. Mp3 et xyz.jpg.

Pour autant que je le sache, 7-zip n'a pas de commande qui fait ce que vous recherchez. Voici un script de fichier batch Windows qui, je pense, fera ce que vous voulez. Il devrait être exécuté à partir de la ligne de commande afin que vous puissiez fournir un chemin d'accès à la racine de l'arborescence des dossiers à traiter.

Fichier unzipper.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 

Dans l'ensemble, ce que le script fait est assez radical et potentiellement destructeur, car il pourrait extraire de nombreux fichiers et supprimer de nombreux fichiers zip par la suite, j'ai désactivé les commandes sur les lignes 12 et 14 qui feraient ces choses en les préférant avec un echo . Cela leur permet d'imprimer ce qu'ils auraient fait si l' echo n'était pas là. De cette façon, vous pouvez tester le script en premier sans endommager votre système de fichiers s'il existe une sorte de problème inattendu.

Pour modifier le script effectuez effectivement ces actions, vous devrez supprimer l' echo sur chacune des deux lignes. La dérogation standard de toute responsabilité s'applique, bien sûr.