Método Sane (-oid)
Se você tivesse uma unidade flash grande o suficiente (ou local de rede gravável, como outro computador compatível com CIFS na rede), você poderia extrair um arquivo de cada vez do arquivo morto e, em seguida, excluir o arquivo do arquivo morto. (~ 20GB livre) "outro espaço" como o local temporário / arranhão. Cada utilitário de arquivamento com o qual já trabalhei pode especificar um local temporário alternativo.
Este exemplo de script usa 7-zip (assim como grep e sed):
@ECHO OFF
SETLOCAL
SET ARCHIVE=temp.zip
SET SCRATCH_PATH=D:\temp
SET DEST_DIR=%~dp0\extracted
FOR /F "delims=*" %%f IN ('7z.exe l "%ARCHIVE%" -slt ^| grep -B1 "Folder = -" ^| grep "Path = " ^| sed "s/Path = //"') DO (
@ECHO.
@ECHO %%~f
7z.exe x -y -o"%DEST_DIR%" -w"%SCRATCH_DIR%" "%ARCHIVE%" "%%~f" >NUL
7z.exe d -w"%SCRATCH_DIR%" "%ARCHIVE%" "%%~f" >NUL
FOR %%g IN (%ARCHIVE%) DO @ECHO %ARCHIVE%: %%~zg
)
É funcionalmente correto, embora eu não tenha tentado criar um arquivo muito grande para extrair no meu computador apenas para testá-lo.
Método maluco
Você também pode compactar temporariamente alguns arquivos no disco rígido que você sabe que não serão necessários durante o processo de extração (como o Office) para liberar espaço suficiente para extrair os arquivos e, em seguida, inverter o processo quando a extração for completo.