@echo off
setlocal enabledelayedexpansion
chcp 936 >nul

set "LOG=%~dp0run_erp_log.txt"
break > "%LOG%"

echo ========================================================= >> "%LOG%"
echo  RUN ERP REPAIR  %date% %time% >> "%LOG%"
echo ========================================================= >> "%LOG%"

set "TARGET_EXE="
set "START_IN="
set "WORK_DIR="
set "REPAIR_EXE="

REM =========================================================
REM  STEP 1: current user desktop
REM =========================================================
echo. >> "%LOG%"
echo [STEP 1] Current user desktop >> "%LOG%"

set "DESKTOP=%USERPROFILE%\Desktop"
echo [STEP 1] DESKTOP = %DESKTOP% >> "%LOG%"

if not exist "%DESKTOP%" (
    echo [STEP 1] ERROR: desktop not found >> "%LOG%"
    goto :END
)
echo [STEP 1] OK >> "%LOG%"

REM =========================================================
REM  STEP 2: scan desktop shortcuts, resolve target + "Start in"
REM =========================================================
echo. >> "%LOG%"
echo [STEP 2] Scan shortcuts >> "%LOG%"

for %%F in ("%DESKTOP%\*.lnk") do (
    set "TP="
    set "WD="
    for /f "usebackq tokens=1,2 delims=|" %%A in (`powershell -NoProfile -Command ^
        "$s=(New-Object -ComObject WScript.Shell).CreateShortcut('%%~F'); $t=$s.TargetPath; $w=$s.WorkingDirectory; if($t){$t+'|'+$w}" 2^>^&1`) do (
        if exist "%%A" (
            set "TP=%%A"
            set "WD=%%B"
            for %%X in ("!TP!") do set "FN=%%~nxX"
            if /i "!FN!"=="ERP.exe" (
                set "TARGET_EXE=!TP!"
                set "START_IN=!WD!"
                echo [STEP 2] MATCH ERP.exe : %%~nxF >> "%LOG%"
            )
            if /i "!FN!"=="GJERP.exe" (
                set "TARGET_EXE=!TP!"
                set "START_IN=!WD!"
                echo [STEP 2] MATCH GJERP.exe : %%~nxF >> "%LOG%"
            )
        )
    )
)

if not defined TARGET_EXE (
    echo [STEP 2] ERROR: no ERP.exe / GJERP.exe shortcut found >> "%LOG%"
    goto :END
)
echo [STEP 2] TARGET_EXE = %TARGET_EXE% >> "%LOG%"
echo [STEP 2] START_IN   = %START_IN% >> "%LOG%"

REM =========================================================
REM  STEP 3: work dir = shortcut "Start in" (Properties),
REM          fallback = the folder of the target exe itself
REM =========================================================
echo. >> "%LOG%"
echo [STEP 3] Get start-in folder >> "%LOG%"

if defined START_IN if exist "!START_IN!\" set "WORK_DIR=!START_IN!"
if not defined WORK_DIR for %%I in ("%TARGET_EXE%") do set "WORK_DIR=%%~dpI"
if not "!WORK_DIR:~-1!"=="\" set "WORK_DIR=!WORK_DIR!\"

echo [STEP 3] WORK_DIR = %WORK_DIR% >> "%LOG%"

if not exist "%WORK_DIR%" (
    echo [STEP 3] ERROR: folder not found >> "%LOG%"
    goto :END
)
echo [STEP 3] OK >> "%LOG%"

REM =========================================================
REM  STEP 4: run 修复ERP.exe
REM  0x4FEE=修  0x590D=复
REM =========================================================
echo. >> "%LOG%"
echo [STEP 4] Run repair exe >> "%LOG%"

for /f "usebackq delims=" %%A in (`powershell -NoProfile -Command ^
    "[char]0x4FEE + [char]0x590D + 'ERP.exe'" 2^>^&1`) do set "REPAIR_EXE=%%A"

echo [STEP 4] REPAIR_EXE = !REPAIR_EXE! >> "%LOG%"

if not exist "%WORK_DIR%!REPAIR_EXE!" (
    echo [STEP 4] ERROR: repair exe not found >> "%LOG%"
    goto :END
)

echo [STEP 4] Running: %WORK_DIR%!REPAIR_EXE! >> "%LOG%"
start "" /d "%WORK_DIR%" "%WORK_DIR%!REPAIR_EXE!"

if errorlevel 1 (
    echo [STEP 4] ERROR: failed to start >> "%LOG%"
) else (
    echo [STEP 4] OK: started >> "%LOG%"
)

:END
echo. >> "%LOG%"
echo ========================================================= >> "%LOG%"
echo  END  %date% %time% >> "%LOG%"
echo  TARGET_EXE = %TARGET_EXE% >> "%LOG%"
echo  START_IN   = %START_IN% >> "%LOG%"
echo  WORK_DIR   = %WORK_DIR% >> "%LOG%"
echo  REPAIR_EXE = %REPAIR_EXE% >> "%LOG%"
echo ========================================================= >> "%LOG%"

echo.
echo Log file: %LOG%
pause
endlocal
exit /b 0