mirror of
https://github.com/dtzp555-max/ocm.git
synced 2026-07-19 09:43:37 +00:00
171 lines
5.6 KiB
Batchfile
171 lines
5.6 KiB
Batchfile
@echo off
|
||
:: ================================================================
|
||
:: OpenClaw Manager v0.5 — Windows 启动脚本
|
||
::
|
||
:: 特性:
|
||
:: * 自动检测 Node.js,未安装时给出安装指引(winget/scoop/官网)
|
||
:: * 自动检测 %USERPROFILE%\.openclaw 目录
|
||
:: * 首次运行自动创建 manager-config.json
|
||
:: * 自动检测端口占用并建议替代端口
|
||
:: * 支持 --dir / --port / --help 参数
|
||
:: ================================================================
|
||
setlocal enabledelayedexpansion
|
||
chcp 65001 >nul 2>&1
|
||
|
||
set "SCRIPT_DIR=%~dp0"
|
||
set "MANAGER_JS=%SCRIPT_DIR%openclaw-manager.js"
|
||
set "CONFIG_JSON=%SCRIPT_DIR%manager-config.json"
|
||
set "MIN_NODE_MAJOR=18"
|
||
|
||
echo.
|
||
echo ===================================
|
||
echo OpenClaw Manager v0.5
|
||
echo -----------------------------------
|
||
echo.
|
||
|
||
:: ── 检查主文件 ────────────────────────────────────────────────
|
||
if not exist "%MANAGER_JS%" (
|
||
echo [X] 找不到 openclaw-manager.js
|
||
echo 期望路径: %MANAGER_JS%
|
||
echo.
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
:: ── 检查 Node.js ─────────────────────────────────────────────
|
||
where node >nul 2>&1
|
||
if errorlevel 1 (
|
||
echo [X] 未找到 Node.js
|
||
echo.
|
||
echo 安装方式(选一种即可):
|
||
echo.
|
||
echo 1^) winget: winget install OpenJS.NodeJS.LTS
|
||
echo 2^) scoop: scoop install nodejs-lts
|
||
echo 3^) 官网下载: https://nodejs.org/
|
||
echo 4^) nvm-windows: https://github.com/coreybutler/nvm-windows
|
||
echo.
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
:: 获取主版本号并检查
|
||
for /f "tokens=1 delims=." %%v in ('node -e "process.stdout.write(process.versions.node)"') do (
|
||
set "NODE_MAJOR=%%v"
|
||
)
|
||
|
||
if !NODE_MAJOR! LSS %MIN_NODE_MAJOR% (
|
||
echo [!] Node.js 版本过低(需要 ^>= v%MIN_NODE_MAJOR%)
|
||
echo.
|
||
echo 安装方式(选一种即可):
|
||
echo.
|
||
echo 1^) winget: winget install OpenJS.NodeJS.LTS
|
||
echo 2^) scoop: scoop install nodejs-lts
|
||
echo 3^) 官网下载: https://nodejs.org/
|
||
echo.
|
||
pause
|
||
exit /b 1
|
||
)
|
||
|
||
for /f "tokens=*" %%v in ('node -e "process.stdout.write('v'+process.versions.node)"') do (
|
||
echo [OK] Node.js %%v
|
||
)
|
||
|
||
:: ── 解析参数 ─────────────────────────────────────────────────
|
||
set "DIR_ARG="
|
||
set "PORT_ARG="
|
||
set "EXTRA_ARGS="
|
||
|
||
:parse_args
|
||
if "%~1"=="" goto :after_args
|
||
if /i "%~1"=="--help" goto :show_help
|
||
if /i "%~1"=="-h" goto :show_help
|
||
if /i "%~1"=="--dir" (
|
||
set "DIR_ARG=%~2"
|
||
shift & shift
|
||
goto :parse_args
|
||
)
|
||
if /i "%~1"=="--port" (
|
||
set "PORT_ARG=%~2"
|
||
shift & shift
|
||
goto :parse_args
|
||
)
|
||
set "EXTRA_ARGS=!EXTRA_ARGS! %~1"
|
||
shift
|
||
goto :parse_args
|
||
|
||
:show_help
|
||
echo 用法: start.bat [选项]
|
||
echo.
|
||
echo 选项:
|
||
echo --dir ^<路径^> OpenClaw 配置目录(默认 %%USERPROFILE%%\.openclaw)
|
||
echo --port ^<端口^> 监听端口(默认 3333)
|
||
echo --help 显示帮助
|
||
echo.
|
||
exit /b 0
|
||
|
||
:after_args
|
||
|
||
:: ── 检测 OpenClaw 配置目录 ───────────────────────────────────
|
||
set "OPENCLAW_DIR="
|
||
if defined DIR_ARG (
|
||
set "OPENCLAW_DIR=!DIR_ARG!"
|
||
) else if exist "%CONFIG_JSON%" (
|
||
for /f "tokens=*" %%d in ('node -e "try{const c=JSON.parse(require('fs').readFileSync('%CONFIG_JSON%','utf8'));const d=c.openclawDir||c.dir||'';process.stdout.write(d.replace(/^~/,require('os').homedir()))}catch{}"') do (
|
||
set "OPENCLAW_DIR=%%d"
|
||
)
|
||
)
|
||
if not defined OPENCLAW_DIR set "OPENCLAW_DIR=%USERPROFILE%\.openclaw"
|
||
|
||
if exist "!OPENCLAW_DIR!" (
|
||
echo [OK] 配置目录: !OPENCLAW_DIR!
|
||
) else (
|
||
echo [!] 配置目录不存在: !OPENCLAW_DIR!
|
||
echo 首次使用?请先运行 openclaw onboard 初始化。
|
||
)
|
||
|
||
:: ── 首次运行:自动创建 manager-config.json ────────────────────
|
||
if not exist "%CONFIG_JSON%" (
|
||
echo [-^>] 首次运行,创建 manager-config.json
|
||
node -e "require('fs').writeFileSync('%CONFIG_JSON%',JSON.stringify({dir:'~/.openclaw'},null,2))"
|
||
)
|
||
|
||
:: ── 检查端口可用性 ───────────────────────────────────────────
|
||
set "PORT=3333"
|
||
if defined PORT_ARG set "PORT=!PORT_ARG!"
|
||
|
||
netstat -an 2>nul | findstr /r ":%PORT% .*LISTENING" >nul 2>&1
|
||
if not errorlevel 1 (
|
||
echo [!] 端口 !PORT! 已被占用
|
||
for %%p in (3334 3335 3336 8080 8888) do (
|
||
netstat -an 2>nul | findstr /r ":%%p .*LISTENING" >nul 2>&1
|
||
if errorlevel 1 (
|
||
echo 尝试备用端口 %%p...
|
||
set "PORT=%%p"
|
||
set "PORT_ARG=%%p"
|
||
goto :port_ok
|
||
)
|
||
)
|
||
)
|
||
:port_ok
|
||
|
||
:: ── 构建启动命令 ─────────────────────────────────────────────
|
||
set "CMD_ARGS="
|
||
if defined DIR_ARG set "CMD_ARGS=!CMD_ARGS! --dir "!DIR_ARG!""
|
||
if defined PORT_ARG set "CMD_ARGS=!CMD_ARGS! --port !PORT_ARG!"
|
||
if defined EXTRA_ARGS set "CMD_ARGS=!CMD_ARGS! !EXTRA_ARGS!"
|
||
|
||
echo.
|
||
echo [^>] 启动中 -^> http://localhost:!PORT!
|
||
echo Ctrl+C 停止
|
||
echo.
|
||
|
||
:: ── 启动 ─────────────────────────────────────────────────────
|
||
node "%MANAGER_JS%"!CMD_ARGS!
|
||
|
||
if errorlevel 1 (
|
||
echo.
|
||
echo [X] 启动失败,请检查上方错误信息。
|
||
pause
|
||
)
|
||
endlocal
|