@echo off
chcp 936 >nul
setlocal enabledelayedexpansion
title 打印服务重启工具（GuxinTools）
set "LOG=%~dp0run_printer_log.txt"

echo ========================================
echo   打印服务清理工具（重启 Spooler）
echo ========================================
echo [%date% %time%] 开始执行 >> "%LOG%"

REM ---- 检查管理员权限（net session 需管理员） ----
net session >nul 2>&1
if %errorlevel% NEQ 0 (
    echo 请求管理员权限...
    > "%temp%\getadmin.vbs" echo Set UAC = CreateObject^("Shell.Application"^)
    >> "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~f0", "", "", "runas", 1
    "%temp%\getadmin.vbs"
    exit /B
)
if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" >nul 2>&1

echo.
echo [1/5] 停止打印服务...
net stop Spooler /y
if !errorlevel! equ 0 (
    echo [OK] 打印服务已停止
    echo [OK] net stop Spooler >> "%LOG%"
) else if !errorlevel! equ 1062 (
    echo [OK] 打印服务本来就未运行（错误 1062，视为正常）
    echo [OK] 服务未运行 1062，视为正常 >> "%LOG%"
) else (
    echo [X] 停止打印服务失败，错误代码: !errorlevel!
    echo [X] net stop Spooler 失败 !errorlevel! >> "%LOG%"
    goto :end_fail
)

echo.
echo [2/5] 等待服务完全停止...
timeout /t 3 /nobreak >nul

echo.
echo [3/5] 删除打印临时文件（卡住的打印队列）...
set "temp_dir=%systemroot%\system32\spool\printers"
if exist "!temp_dir!" (
    del /q /f /s "!temp_dir!\*.*" >nul 2>&1
    if !errorlevel! equ 0 (
        echo [OK] 打印临时文件已删除
        echo [OK] 清空 !temp_dir! >> "%LOG%"
    ) else (
        echo [!] 删除时个别文件出错（被占用可忽略），错误代码: !errorlevel!
        echo [!] 清理出错 !errorlevel! >> "%LOG%"
    )
) else (
    echo [!] 临时文件夹不存在: !temp_dir!
)

echo.
echo [4/5] 启动打印服务...
net start Spooler
if !errorlevel! equ 0 (
    echo [OK] 打印服务已启动
    echo [OK] net start Spooler >> "%LOG%"
) else if !errorlevel! equ 2 (
    echo [OK] 打印服务已在运行（错误 2，视为正常）
    echo [OK] 服务已运行 2，视为正常 >> "%LOG%"
) else (
    echo [X] 启动打印服务失败，错误代码: !errorlevel!
    echo [X] net start Spooler 失败 !errorlevel! >> "%LOG%"
    goto :end_fail
)

echo.
echo [5/5] 操作完成！
echo.
echo 总结:
echo - 打印服务已重启
echo - 打印临时文件（卡住的队列）已清理
echo.
echo 如果仍有打印问题，请检查打印机驱动或重新安装打印机。
echo [%date% %time%] 执行完成 >> "%LOG%"
goto :end_ok

:end_fail
echo.
echo 操作未完成，请把本窗口截图连同脚本目录下的 run_printer_log.txt 发给 IT。
echo [%date% %time%] 执行失败 >> "%LOG%"
pause
exit /b 1

:end_ok
echo 本脚本目录下的 run_printer_log.txt 已记录本次操作。
pause
exit /b 0
