@echo off
chcp 65001 >nul 2>&1
:: ====================== 请修改以下参数 ======================
set "WINRAR=C:\Program Files\WinRAR\WinRAR.exe"  :: WinRAR安装路径
set "PASSWORD=网址www.98mosi.site或www.52mosi.site"                         :: 统一解压密码
:: ============================================================

:: 核心：自动获取当前.bat文件所在的文件夹路径
set "ROOT=%~dp0"
:: 标记是否还有未解压的压缩文件（控制循环）
set "HAVE_ZIP=1"
:: 记录解压轮次（方便查看日志）
set "ROUND=0"

:: 检查WinRAR是否存在
if not exist "%WINRAR%" (
    echo 错误：未找到WinRAR，请检查路径！
    pause
    exit /b 1
)

echo ======================================================
echo 多层压缩文件自动递归解压脚本
echo 脚本所在目录：%ROOT%
echo 使用统一密码：%PASSWORD%
echo 解压规则：递归解压/原路径/不覆盖/静默执行
echo ======================================================
echo.

:: 核心循环：只要还有压缩文件，就持续解压（直到无新压缩文件）
:UNZIP_LOOP
if %HAVE_ZIP% equ 0 goto :END_LOOP
set /a ROUND+=1
set "HAVE_ZIP=0"  :: 每轮初始化为无压缩文件，找到则置1

echo 【第%ROUND%轮解压】开始遍历目录查找压缩文件...
:: 递归遍历所有指定格式压缩文件，逐一无缝解压
for /r "%ROOT%" %%f in (*.rar,*.zip,*.7z,*.tar,*.gz) do (
    set "HAVE_ZIP=1"  :: 找到压缩文件，标记为需要继续轮询
    echo  解压：%%~nxf → %%~dpf
    :: 解压命令：-p密码 -o-不覆盖 -y自动确认 静默执行
    "%WINRAR%" x -p%PASSWORD% -o- -y "%%f" "%%~dpf\" >nul 2>&1
    :: 解压完成后删除当前压缩包（避免重复解压，可选保留：注释此行即可）
    del /f /q "%%f"
)

:: 本轮无压缩文件则结束循环，否则继续下一轮
if %HAVE_ZIP% equ 1 (
    echo  第%ROUND%轮解压完成，检测到新压缩文件，继续下一轮...
    echo.
    goto :UNZIP_LOOP
)

:END_LOOP
echo.
echo ======================================================
echo 所有多层压缩文件解压完成！共执行%ROUND%轮解压
echo 解压根目录：%ROOT%
echo ======================================================
pause