extract file from a zip inside another zip using 7z command line
Abaixo está uma maneira de script CLI 7Zip que fiz isso de alguns anos atrás. Eu tive que usá-lo e ajustá-lo uma ou duas vezes desde que fosse necessário conforme necessário.
Isso extrai todos os arquivos zip (e seus conteúdos) dentro de outros arquivos zip (e seus conteúdos) até que nenhum outro arquivo zip permaneça extraído e essencialmente percorra recursivamente a partir do arquivo zip pai inicial [root] até o último arquivo zip filho. e seu conteúdo; extraindo arquivos de todos os arquivos zip e sub-zip.
Eu usei esse método para percorrer cerca de quatro níveis por alguma razão ridícula em que uma empresa estava enviando dados como este como padrão e não podia alterá-lo, mas ainda assim consegui automatizar a parte que me foi dada .
Script em lote CLI 7za
Defina as variáveis de origem, destino e diretório de trabalho para sua necessidade e copie o arquivo para a pasta do diretório de origem e, em seguida, inicie o processo. Caso contrário, você pode alterar o *.zip
com <ParentZipFileName>.zip
.
:: This script uses the 7zip CLI to extract ZIP file(s) contents in one location to another
:: It then does an XCOPY of extracted ZIP files within the initial extacted files and copies those to a workdir
:: It then deletes ZIP files from source, and extracts the other ZIP files from workdir and loops until complete
:: NOTE that the 7za may need to have the environmental variable set accordinly
SET sourcedir=C:\Source
SET destdir=C:\Dest
SET workdir=C:\Workdir
IF NOT EXIST "%sourcedir%" MD "%sourcedir%"
IF NOT EXIST "destdir%" MD "%destdir%"
IF NOT EXIST "%workdir%" MD "%workdir%"
:unzip
7za -Y e "%sourcedir%" -o"%destdir%" -r
IF EXIST "%workdir%\*.zip" DEL /Q /F "%workdir%\*.zip"
XCOPY /Y /F "%destdir%\*.zip" "%workdir%\"
IF EXIST "%destdir%\*.zip" DEL /Q /F "%destdir%\*.zip"
DIR "%workdir%\*.zip" /A-D
ERRORLEVEL 1 GOTO done
:unzip2
7za -Y e "%workdir%" -o"%destdir%" -r
IF EXIST "%workdir%\*.zip" DEL /Q /F "%workdir%\*.zip"
XCOPY /Y /F "%destdir%\*.zip" "%workdir%\"
IF EXIST "%destdir%\*.zip" DEL /Q /F "%destdir%\*.zip"
DIR "%workdir%\*.zip" /A-D
IF ERRORLEVEL 1 GOTO done
GOTO unzip2
:done
GOTO EOF