J'utilise la ligne de commande 7-Zip pour extraire une archive Zip appelé abc.Zip
qui est une archive avec un dossier appelé 'zipper' contenant trois fichiers texte (a.txt
, b.txt
et c.txt
).
Mon problème est quand je l'extrais avec la commande suivante:
7z e C:\abc\abc.Zip -y oC:\abc
7-Zip extrait tout, mais pas le dossier 'zipper', il extrait simplement a.txt
, b.txt
et c.txt
et les place dans la destination de sortie (c'est-à-dire, C:\abc
).
Comment puis-je faire 7-Zip simplement extraire le dossier actuel?
Vous devez utiliser 7z x archive.Zip
pour extraire avec des chemins complets. Voir: http://sevenzip.sourceforge.jp/chm/cmdline/commands/extract_full.htm
Il devrait probablement y avoir un trait d'union devant la o
:
-oC:\abc
Considérez également l'option -r
pour la récursivité.
Je devais résoudre un problème similaire. Voici le code que j'ai utilisé. Ce script reçoit un dossier et décompresse tous les zips (et les supprime ensuite). L'astuce consiste à décompresser les données dans un dossier spécial. Un peu nerveux mais ça marche ...
@echo off
set SEVEN_Zip_HOME=C:\Program Files\7-Zip
set TEMPDIR=temp
set WORKING_DIR="%1"
if "%WORKING_DIR%"=="" set WORKING_DIR=%~dp0
cd /d %WORKING_DIR%
if not exist %TEMPDIR% md %TEMPDIR%
for %%i in ("%WORKING_DIR%\*.Zip") do call :unzipAndDelete "%%i"
rd %TEMPDIR%
goto :end
:unzipAndDelete
set Zip_FILE=%~1
call :extractName %Zip_FILE%
call "%SEVEN_Zip_HOME%\7z.exe" e "%Zip_FILE%" -o./%TEMPDIR%
copy .\%TEMPDIR%\*.* %FILENAME%.log
del .\%TEMPDIR%\*.* /q
del "%Zip_FILE%"
goto :end
:extractName
set FILENAME=%~n1
goto :end
:end