start-server-client.bat 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title Animation Manager
  4. chcp 65001 >nul
  5. REM ================关闭旧的 server.js 进程========================
  6. taskkill /F /IM node.exe >nul 2>&1
  7. REM 等待一下确保进程完全关闭
  8. timeout /t 1 /nobreak >nul 2>&1
  9. REM ================启动 server.js(后台运行)========================
  10. start /B node server/server.js
  11. REM 等待一小段时间,让服务器先清屏
  12. timeout /t 1 /nobreak >nul 2>&1
  13. REM ================检测服务器是否启动成功========================
  14. echo [批处理脚本] 正在检测服务器状态...
  15. set MAX_ATTEMPTS=30
  16. set ATTEMPT=0
  17. set SERVER_READY=0
  18. :check_server
  19. set /a ATTEMPT+=1
  20. if %ATTEMPT% GTR %MAX_ATTEMPTS% (
  21. echo 错误:服务器启动超时,请检查服务器日志
  22. pause
  23. exit /b 1
  24. )
  25. REM 使用 PowerShell 检测服务器是否响应(兼容性更好)
  26. powershell -NoProfile -Command "try { $response = Invoke-WebRequest -Uri 'http://localhost:3000/' -TimeoutSec 2 -UseBasicParsing -ErrorAction Stop; exit 0 } catch { exit 1 }" >nul 2>&1
  27. if %ERRORLEVEL% EQU 0 (
  28. set SERVER_READY=1
  29. ) else (
  30. REM 如果 PowerShell 方法失败,尝试简单的端口检测
  31. powershell -NoProfile -Command "try { $tcpClient = New-Object System.Net.Sockets.TcpClient; $tcpClient.Connect('localhost', 3000); $tcpClient.Close(); exit 0 } catch { exit 1 }" >nul 2>&1
  32. if %ERRORLEVEL% EQU 0 (
  33. set SERVER_READY=1
  34. )
  35. )
  36. if %SERVER_READY% EQU 0 (
  37. timeout /t 1 /nobreak >nul 2>&1
  38. goto check_server
  39. )
  40. REM ================服务器已启动,打开浏览器========================
  41. REM 等待服务器输出完成后再显示消息
  42. timeout /t 1 /nobreak >nul 2>&1
  43. start http://localhost:3000/index.html?auto=true
  44. REM 不再输出额外信息,避免与服务器输出重叠
  45. pause >nul
  46. REM 关闭 node 服务
  47. taskkill /F /IM node.exe >nul 2>&1