echo %rant%
Bem, aqui vamos nós ... o resultado de horas de pesquisa, tentativas fracassadas e muito mexer (até mesmo tentamos o PowerShell - não suporta caminhos de arquivos longos fora da caixa - sheesh! ) ... uma versão que realmente recursivamente extrai arquivos e coloca todos eles em uma única pasta para exclusão ...
Eu peguei a resposta de Pat e fiz muita revisão ... para suportar ... longos caminhos de arquivo além de 260 caracteres de comprimento!:
@echo off
setlocal enabledelayedexpansion enableextensions
set scriptDir=%~dp0
REM Clear the log files.
echo . > unzipLog.txt
echo . > unzipErrors.txt
mkdir DeleteMe >> unzipLog.txt 2>nul
REM Recurse through all common compressed archive files.
FOR /R %%a IN (*.zip,*.7z,*.rar,*.tar,*.gz) DO (
@echo: >> unzipLog.txt 2>> unzipErrors.txt
@echo: >> unzipLog.txt 2>> unzipErrors.txt
@echo: >> unzipLog.txt 2>> unzipErrors.txt
@echo: >> unzipLog.txt 2>> unzipErrors.txt
@echo: >> unzipLog.txt 2>> unzipErrors.txt
REM Prepend \?\ to the beginning of each path to handle paths longer than 260 characters.
if [%1] EQU [/y] (
REM Extract only.
7z x "\?\%%a" -o"%%~dpna" -aoa >> unzipLog.txt 2>> unzipErrors.txt
) else if [%1] EQU [/yd] (
REM Extract and delete.
for %%b in ("%%a") do (
set p=%%~dpb
set f=%%~nxb
)
IF !p:~-1!==\ SET p=!p:~0,-1!
echo "!p!" "!scriptDir!DeleteMe" "!f!"
echo "!p!" "!scriptDir!DeleteMe" "!f!" >> unzipLog.txt 2>> unzipErrors.txt
7z x "\?\%%a" -o"%%~dpna" -aoa >> unzipLog.txt 2>> unzipErrors.txt
if errorlevel 1 (
echo There was an error so I won't delete >> unzipLog.txt 2>> unzipErrors.txt
) else (
robocopy "!p!" "!scriptDir!DeleteMe" "!f!" /MOVE /FP /NS /NC /NFL /NDL /NP /IS /IT /SL >> unzipLog.txt 2>> unzipErrors.txt
)
) else (
REM Just echo.
echo 7z x "\?\%%a" -o"%%~dpna" -aoa >> unzipLog.txt 2>> unzipErrors.txt
)
)
REM Can comment this out if you just want to extract the archives to a folder and not delete them...:
REM WARNING: recommended call this manually and very carefully!!!
REM rmdir /S /Q DeleteMe
REM WARNING: recommended call this manually and very carefully!!!
echo Use /y to actually do the extraction. Use /yd to extract then delete the zip file.
echo See unzipLog.txt and unzipErrors.txt!
endlocal