@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
title 插件加载失败修复工具

:: ====================== 配置区 ======================
set "TARGET_LNK_NAME=渲云效果图"
set "MS_FILE_NAME=axmaxrenderMenu.ms"
set "PLUGIN_REL_PATH=plugins\xrender-plugin\!MS_FILE_NAME!"
set "MAX_LNK_KEYWORD=3ds Max"
set "MAX_STARTUP_REL_PATH=scripts\Startup"
:: ===================================================

:: 1. 检查管理员权限
echo ==============================================
echo 正在检查管理员权限...
fltmc >nul 2>&1
if %errorlevel% neq 0 (
    echo 错误：请以【管理员身份】运行此脚本！
    pause
    exit /b 1
)
echo 成功：已获取管理员权限
echo ==============================================

:: 2. 初始化变量
set "MS_FILE_PATH="
set "DESKTOP=%USERPROFILE%\Desktop"
set "PUBLIC_DESKTOP=C:\Users\Public\Desktop"

:: ====================== 步骤1：查找【渲云效果图】快捷方式 ======================
echo.
echo [日志] 查找【!TARGET_LNK_NAME!】

:: 遍历桌面所有快捷方式（用户桌面+公共桌面）
for /f "delims=" %%i in ('dir /b /a-d "!DESKTOP!\*.lnk" "!PUBLIC_DESKTOP!\*.lnk" 2^>nul') do (
    :: 匹配快捷方式名称（完全匹配）
    if /i "%%~ni"=="!TARGET_LNK_NAME!" (
        set "CUR_LNK=!DESKTOP!\%%i"
        if not exist "!CUR_LNK!" set "CUR_LNK=!PUBLIC_DESKTOP!\%%i"
        
        echo [日志] 找到目标：!CUR_LNK!
        
        :: 解析快捷方式指向的EXE路径
        for /f "delims=" %%a in ('powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('!CUR_LNK!');$s.TargetPath" 2^>nul') do (
            set "EXE_PATH=%%a"
            if exist "!EXE_PATH!" (
                :: 获取EXE所在目录
                for /d %%b in ("%%~dpa.") do set "EXE_DIR=%%~fb"
                echo [日志] 目标目录：!EXE_DIR!
                
                :: 拼接目标ms文件路径
                set "TEMP_MS_PATH=!EXE_DIR!\!PLUGIN_REL_PATH!"
                if exist "!TEMP_MS_PATH!" (
                    set "MS_FILE_PATH=!TEMP_MS_PATH!"
                    echo [日志] 成功找到插件文件：!MS_FILE_PATH!
                    goto FOUND_MS_FILE
                ) else (
                    echo [警告] 该目录下未找到插件文件：!TEMP_MS_PATH!
                )
            )
        )
    )
)

:FOUND_MS_FILE
:: 检查是否找到ms文件
if not defined MS_FILE_PATH (
    echo.
    echo [错误] 未找到【!TARGET_LNK_NAME!】对应的 !MS_FILE_NAME! 文件，脚本退出！
    pause
    exit /b 1
)

:: ====================== 步骤2：查找所有【3ds Max】快捷方式 ======================
echo.
echo [日志] 查找【!MAX_LNK_KEYWORD!】
set "MAX_FOUND=0"

:: 遍历桌面所有快捷方式
for /f "delims=" %%i in ('dir /b /a-d "!DESKTOP!\*.lnk" "!PUBLIC_DESKTOP!\*.lnk" 2^>nul') do (
    set "LNK_NAME=%%~ni"
    :: 匹配包含3ds Max的快捷方式
    echo "!LNK_NAME!" | find /i "!MAX_LNK_KEYWORD!" >nul
    if !errorlevel! equ 0 (
        set /a MAX_FOUND+=1
        set "MAX_LNK_PATH=!DESKTOP!\%%i"
        if not exist "!MAX_LNK_PATH!" set "MAX_LNK_PATH=!PUBLIC_DESKTOP!\%%i"
        
        echo.
        echo [日志] 找到3ds Max：!MAX_LNK_PATH!
        
        :: 解析快捷方式指向的EXE路径
        for /f "delims=" %%a in ('powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('!MAX_LNK_PATH!');$s.TargetPath" 2^>nul') do (
            set "MAX_EXE_PATH=%%a"
            if exist "!MAX_EXE_PATH!" (
                :: 获取MAX的EXE目录
                for /d %%b in ("%%~dpa.") do set "MAX_EXE_DIR=%%~fb"
                :: 拼接Startup插件目录
                set "MAX_STARTUP_DIR=!MAX_EXE_DIR!\!MAX_STARTUP_REL_PATH!"
                
                echo [日志] 3ds Max插件目录：!MAX_STARTUP_DIR!
                
                :: ====================== 步骤3：拷贝文件 ======================
                if exist "!MAX_STARTUP_DIR!" (
                    echo [日志] 目录存在，开始拷贝文件...
                    copy /y "!MS_FILE_PATH!" "!MAX_STARTUP_DIR!\" >nul
                    if !errorlevel! equ 0 (
                        echo [成功] 已将 !MS_FILE_NAME! 拷贝至：!MAX_STARTUP_DIR!
                    ) else (
                        echo [错误] 拷贝失败！
                    )
                ) else (
                    echo [跳过] 插件目录不存在，不创建，直接跳过
                )
            )
        )
    )
)

:: ====================== 结束 ======================
echo.
echo ==============================================
if !MAX_FOUND! equ 0 (
    echo [结果] 未找到任何3ds Max
) else (
    echo [结果] 脚本执行完成，共处理 !MAX_FOUND! 个3ds Max，请重启3ds Max后点击“渲云6”菜单中的一键渲染。
)
echo ==============================================
echo.
pause
exit /b 0