Files
ocm/start.bat
T
2026-02-24 20:01:15 +10:00

171 lines
5.6 KiB
Batchfile
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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