@echo off
chcp 65001 >nul
setlocal EnableExtensions DisableDelayedExpansion
title 一键安装 PDF 右键合并

echo ========================================
echo   一键安装 PDF 右键合并工具
echo ========================================
echo.

set "QPDF_EXE="

for /f "delims=" %%I in ('where qpdf.exe 2^>nul') do (
    if not defined QPDF_EXE set "QPDF_EXE=%%~fI"
)

if not defined QPDF_EXE (
    for /d %%D in ("%ProgramFiles%\qpdf*") do (
        if exist "%%~fD\bin\qpdf.exe" set "QPDF_EXE=%%~fD\bin\qpdf.exe"
    )
)

if not defined QPDF_EXE (
    echo 未检测到 qpdf，正在通过 winget 安装……
    echo.

    where winget.exe >nul 2>&1
    if errorlevel 1 (
        echo [失败] 当前系统没有 winget。
        echo 请先安装“应用安装程序”，或手动安装 qpdf 后重新运行本脚本。
        echo.
        pause
        exit /b 1
    )

    winget install --id QPDF.QPDF -e --accept-package-agreements --accept-source-agreements
    if errorlevel 1 (
        echo.
        echo [失败] qpdf 安装失败。
        echo 请检查网络连接后重试。
        echo.
        pause
        exit /b 1
    )

    for /d %%D in ("%ProgramFiles%\qpdf*") do (
        if exist "%%~fD\bin\qpdf.exe" set "QPDF_EXE=%%~fD\bin\qpdf.exe"
    )

)

if not defined QPDF_EXE (
    echo.
    echo [失败] qpdf 已安装，但没有找到 qpdf.exe。
    echo 请重新运行本脚本，或检查 qpdf 的安装目录。
    echo.
    pause
    exit /b 1
)

echo 已找到 qpdf：
echo %QPDF_EXE%
echo.

"%QPDF_EXE%" --version >nul 2>&1
if errorlevel 1 (
    echo [失败] qpdf 无法正常运行。
    echo.
    pause
    exit /b 1
)

set "SENDTO=%APPDATA%\Microsoft\Windows\SendTo"
set "MERGE_SCRIPT=%SENDTO%\合并PDF.cmd"

if not exist "%SENDTO%" (
    echo [失败] 没有找到 Windows“发送到”文件夹。
    echo.
    pause
    exit /b 1
)

> "%MERGE_SCRIPT%" echo @echo off
>>"%MERGE_SCRIPT%" echo chcp 65001 ^>nul
>>"%MERGE_SCRIPT%" echo setlocal EnableExtensions DisableDelayedExpansion
>>"%MERGE_SCRIPT%" echo set "QPDF=%QPDF_EXE%"
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo if not exist "%%QPDF%%" ^(
>>"%MERGE_SCRIPT%" echo     echo 未找到 qpdf：
>>"%MERGE_SCRIPT%" echo     echo %%QPDF%%
>>"%MERGE_SCRIPT%" echo     echo.
>>"%MERGE_SCRIPT%" echo     pause
>>"%MERGE_SCRIPT%" echo     exit /b 1
>>"%MERGE_SCRIPT%" echo ^)
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo if "%%~2"=="" ^(
>>"%MERGE_SCRIPT%" echo     echo 请至少选择两个 PDF 文件。
>>"%MERGE_SCRIPT%" echo     echo.
>>"%MERGE_SCRIPT%" echo     pause
>>"%MERGE_SCRIPT%" echo     exit /b 1
>>"%MERGE_SCRIPT%" echo ^)
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo set "NAME="
>>"%MERGE_SCRIPT%" echo set /p "NAME=请输入合并后的文件名，直接回车默认为“合并”："
>>"%MERGE_SCRIPT%" echo if not defined NAME set "NAME=合并"
>>"%MERGE_SCRIPT%" echo if /i "%%NAME:~-4%%"==".pdf" set "NAME=%%NAME:~0,-4%%"
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo set "OUT=%%~dp1%%NAME%%.pdf"
>>"%MERGE_SCRIPT%" echo set /a NUM=2
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo :CHECK_NAME
>>"%MERGE_SCRIPT%" echo if not exist "%%OUT%%" goto MERGE
>>"%MERGE_SCRIPT%" echo set "OUT=%%~dp1%%NAME%% ^(%%NUM%%^).pdf"
>>"%MERGE_SCRIPT%" echo set /a NUM+=1
>>"%MERGE_SCRIPT%" echo goto CHECK_NAME
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo :MERGE
>>"%MERGE_SCRIPT%" echo echo.
>>"%MERGE_SCRIPT%" echo echo 正在合并，请稍候……
>>"%MERGE_SCRIPT%" echo "%%QPDF%%" --empty --pages %%* -- "%%OUT%%"
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo if errorlevel 1 ^(
>>"%MERGE_SCRIPT%" echo     echo.
>>"%MERGE_SCRIPT%" echo     echo 合并失败，请检查 PDF 文件是否损坏或文件名是否合法。
>>"%MERGE_SCRIPT%" echo     echo.
>>"%MERGE_SCRIPT%" echo     pause
>>"%MERGE_SCRIPT%" echo     exit /b 1
>>"%MERGE_SCRIPT%" echo ^)
>>"%MERGE_SCRIPT%" echo.
>>"%MERGE_SCRIPT%" echo explorer.exe /select,"%%OUT%%"
>>"%MERGE_SCRIPT%" echo exit /b 0

if not exist "%MERGE_SCRIPT%" (
    echo [失败] 无法创建右键合并脚本。
    echo.
    pause
    exit /b 1
)

echo ========================================
echo   安装完成
echo ========================================
echo.
echo 使用方法：
echo 1. 选中至少两个 PDF 文件
echo 2. 右键选择“显示更多选项”
echo 3. 选择“发送到”→“合并PDF”
echo 4. 输入文件名，合并结果自动保存到源文件夹
echo.
echo 安装位置：
echo %MERGE_SCRIPT%
echo.
pause
exit /b 0
