Rename scripts with -Windows/-Mac/-Linux suffix so users can easily identify which file to double-click on the USB drive. Add tests/test-scripts.sh with 93 checks covering: - File existence, bash syntax, portable mode, gateway run, security - Cross-platform consistency between .bat and .command versions
496 lines
14 KiB
Batchfile
496 lines
14 KiB
Batchfile
@echo off
|
||
chcp 65001 >nul 2>&1
|
||
title U-Claw 虾盘 - 启动菜单
|
||
setlocal enabledelayedexpansion
|
||
|
||
set "UCLAW_DIR=%~dp0"
|
||
set "OPENCLAW_DIR=%UCLAW_DIR%openclaw"
|
||
set "NODE_DIR=%UCLAW_DIR%runtime\node-win-x64"
|
||
set "NODE_BIN=%NODE_DIR%\node.exe"
|
||
set "NPM_BIN=%NODE_DIR%\npm.cmd"
|
||
set "PORTABLE_HOME=%UCLAW_DIR%portable-home"
|
||
set "PORTABLE_STATE_DIR=%PORTABLE_HOME%\.openclaw"
|
||
set "PORTABLE_CONFIG_PATH=%PORTABLE_STATE_DIR%\openclaw.json"
|
||
|
||
set "OPENCLAW_HOME=%PORTABLE_HOME%"
|
||
set "OPENCLAW_STATE_DIR=%PORTABLE_STATE_DIR%"
|
||
set "OPENCLAW_CONFIG_PATH=%PORTABLE_CONFIG_PATH%"
|
||
set "PATH=%NODE_DIR%;%PATH%"
|
||
|
||
if not exist "%PORTABLE_STATE_DIR%" mkdir "%PORTABLE_STATE_DIR%"
|
||
|
||
goto MENU
|
||
|
||
:MENU
|
||
cls
|
||
echo.
|
||
echo ╔════════════════════════════════════════════════════════╗
|
||
echo ║ ║
|
||
echo ║ U-Claw 虾盘 v1.1 ║
|
||
echo ║ OpenClaw AI 助手 一键安装盘 ║
|
||
echo ║ ║
|
||
echo ║ 专为中国用户优化 · 免翻墙 · 离线安装 ║
|
||
echo ║ ║
|
||
echo ╠════════════════════════════════════════════════════════╣
|
||
echo ║ ║
|
||
|
||
:: 状态检测
|
||
for /f "tokens=*" %%v in ('"%NODE_BIN%" --version 2^>nul') do set "NODE_VER=%%v"
|
||
set "ST_MOD=未安装"
|
||
set "ST_BUILD=未构建"
|
||
set "ST_INST=未安装"
|
||
set "ST_PORT=未配置"
|
||
if exist "%OPENCLAW_DIR%\node_modules" set "ST_MOD=已安装"
|
||
if exist "%OPENCLAW_DIR%\dist" set "ST_BUILD=已构建"
|
||
if exist "%USERPROFILE%\.uclaw\openclaw" set "ST_INST=已安装"
|
||
if exist "%PORTABLE_CONFIG_PATH%" set "ST_PORT=已配置"
|
||
|
||
echo ║ 系统: x64 ^| Node: %NODE_VER% ║
|
||
echo ║ 依赖: %ST_MOD% ^| 构建: %ST_BUILD% ║
|
||
echo ║ 便携配置: %ST_PORT% ^| 电脑安装: %ST_INST% ║
|
||
echo ║ ║
|
||
echo ╠════════════════════════════════════════════════════════╣
|
||
echo.
|
||
echo ---- 安装 -----------------------------------------
|
||
echo.
|
||
echo [1] 安装 OpenClaw 到本机(仅限自己的电脑)
|
||
echo [2] 仅安装依赖(npm install)
|
||
echo [3] 仅构建项目(npm build)
|
||
echo [4] 直接从 U 盘运行(配置也保存在 U 盘里)
|
||
echo.
|
||
echo ---- 中国优化 -------------------------------------
|
||
echo.
|
||
echo [5] 首次配置向导(选模型、选平台、填 API Key)
|
||
echo [6] 配置中国聊天平台(QQ Bot/飞书/微信)
|
||
echo [7] 设置国内镜像源
|
||
echo.
|
||
echo ---- 维护工具 -------------------------------------
|
||
echo.
|
||
echo [8] 诊断修复(openclaw doctor)
|
||
echo [9] 备份当前状态
|
||
echo [10] 恢复备份
|
||
echo [11] 重置 OpenClaw(恢复出厂)
|
||
echo [12] 清理缓存和临时文件
|
||
echo.
|
||
echo ---- 其他 -----------------------------------------
|
||
echo.
|
||
echo [13] 浏览预装技能(58个,已离线可用)
|
||
echo [14] 中国用户快速上手指南
|
||
echo [15] 查看使用说明
|
||
echo [16] 系统信息
|
||
echo [17] 打开本地网页控制台
|
||
echo [0] 退出
|
||
echo.
|
||
echo ╚════════════════════════════════════════════════════════╝
|
||
echo.
|
||
|
||
set /p CHOICE=" 请选择 [0-17]: "
|
||
|
||
if "%CHOICE%"=="1" goto INSTALL
|
||
if "%CHOICE%"=="2" goto NPM_INSTALL
|
||
if "%CHOICE%"=="3" goto BUILD
|
||
if "%CHOICE%"=="4" goto RUN
|
||
if "%CHOICE%"=="5" goto CHINA_MODELS
|
||
if "%CHOICE%"=="6" goto CHINA_CHANNELS
|
||
if "%CHOICE%"=="7" goto MIRROR
|
||
if "%CHOICE%"=="8" goto DOCTOR
|
||
if "%CHOICE%"=="9" goto BACKUP
|
||
if "%CHOICE%"=="10" goto RESTORE
|
||
if "%CHOICE%"=="11" goto RESET
|
||
if "%CHOICE%"=="12" goto CLEANUP
|
||
if "%CHOICE%"=="13" goto SKILLS
|
||
if "%CHOICE%"=="14" goto CHINA_GUIDE
|
||
if "%CHOICE%"=="15" goto README
|
||
if "%CHOICE%"=="16" goto SYSINFO
|
||
if "%CHOICE%"=="17" goto DASHBOARD
|
||
if "%CHOICE%"=="0" goto EXIT
|
||
|
||
echo 无效选择
|
||
pause
|
||
goto MENU
|
||
|
||
:INSTALL
|
||
echo.
|
||
echo === 安装 OpenClaw 到电脑 ===
|
||
echo.
|
||
echo 提醒:如果这是临时电脑、公司电脑或别人的电脑,
|
||
echo 更推荐返回主菜单选择 [4] 从 U 盘运行。
|
||
echo.
|
||
call "%UCLAW_DIR%安装到电脑.bat"
|
||
pause
|
||
goto MENU
|
||
|
||
:NPM_INSTALL
|
||
echo.
|
||
echo === 安装 npm 依赖 ===
|
||
echo.
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
echo.
|
||
echo 依赖安装完成!
|
||
pause
|
||
goto MENU
|
||
|
||
:BUILD
|
||
echo.
|
||
echo === 构建 OpenClaw ===
|
||
echo.
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
echo 先安装依赖...
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NODE_BIN%" "%NPM_BIN%" run build
|
||
echo.
|
||
echo 构建完成!
|
||
pause
|
||
goto MENU
|
||
|
||
:RUN
|
||
echo.
|
||
echo === 从 U 盘启动 OpenClaw ===
|
||
echo.
|
||
echo 便携模式:配置、状态、记忆都会写在这只 U 盘里。
|
||
echo 拔掉 U 盘后当前会话会结束,但换一台电脑再插上还能继续用。
|
||
echo.
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
echo 先安装依赖...
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
if not exist "%OPENCLAW_DIR%\dist" (
|
||
echo 先构建...
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NODE_BIN%" "%NPM_BIN%" run build
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
if not exist "%PORTABLE_CONFIG_PATH%" (
|
||
echo 检测到你还没有完成首次配置。
|
||
echo 首次配置会保存在 U 盘中,不会写进这台电脑。
|
||
echo.
|
||
set /p DO_ONBOARD=" 现在开始首次配置? (y/n) "
|
||
if /i "!DO_ONBOARD!"=="y" (
|
||
"%NODE_BIN%" openclaw.mjs onboard
|
||
echo.
|
||
echo 首次配置完成,已保存到 U 盘。
|
||
)
|
||
) else (
|
||
echo 正在启动网关服务...
|
||
echo 此窗口不要关闭,关闭后服务会停止。
|
||
echo.
|
||
"%NODE_BIN%" openclaw.mjs gateway run --allow-unconfigured --force
|
||
)
|
||
pause
|
||
goto MENU
|
||
|
||
:CHINA_MODELS
|
||
echo.
|
||
echo === 首次配置向导 ===
|
||
echo.
|
||
echo 国产模型选择提示:
|
||
echo.
|
||
echo DeepSeek → 选 Custom Provider
|
||
echo Base URL: https://api.deepseek.com/v1
|
||
echo 模型名: deepseek-chat
|
||
echo Kimi → 选 Moonshot AI
|
||
echo 通义千问 → 选 Qwen
|
||
echo MiniMax → 选 MiniMax
|
||
echo 豆包 → 选 Volcano Engine
|
||
echo.
|
||
echo 按方向键上下滚动列表,回车确认
|
||
echo.
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
"%NODE_BIN%" openclaw.mjs onboard
|
||
pause
|
||
goto MENU
|
||
|
||
:CHINA_CHANNELS
|
||
echo.
|
||
echo === 配置中国聊天平台 ===
|
||
echo.
|
||
echo [a] 飞书 Feishu/Lark — 已内置,企业首选
|
||
echo [b] QQ(腾讯官方)★推荐 — 3条命令,1分钟,免费免翻墙
|
||
echo [c] 微信(社区插件) — iPad协议
|
||
echo [d] Telegram — 推荐,简单好用
|
||
echo.
|
||
set /p CH=" 请选择 (a-d): "
|
||
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
|
||
if /i "%CH%"=="a" (
|
||
echo.
|
||
echo 配置飞书 Feishu
|
||
echo 1. 访问 https://open.feishu.cn/app 创建应用
|
||
echo 2. 获取 App ID 和 App Secret
|
||
echo 3. 配置事件订阅和权限
|
||
echo.
|
||
"%NODE_BIN%" openclaw.mjs onboard
|
||
)
|
||
if /i "%CH%"=="b" (
|
||
echo.
|
||
echo 配置 QQ(腾讯官方接入)
|
||
echo.
|
||
echo 这是国内最简单的 AI 助手接入方式!
|
||
echo 全程 1 分钟,完全免费,无需翻墙。
|
||
echo.
|
||
echo 1. 扫码注册: http://q.qq.com/qqbot/openclaw/login.html
|
||
echo 2. 点击「创建机器人」,获取 AppID 和 AppSecret
|
||
echo.
|
||
if exist "%OPENCLAW_DIR%\dist" (
|
||
set /p DO_QQ=" 是否现在安装 QQ 插件? (y/n) "
|
||
if /i "!DO_QQ!"=="y" (
|
||
echo.
|
||
echo 正在安装 QQ 插件...
|
||
"%NODE_BIN%" openclaw.mjs plugins install @sliverp/qqbot@latest
|
||
echo.
|
||
set /p QQ_APP_ID=" AppID: "
|
||
echo.
|
||
set /p QQ_APP_SECRET=" AppSecret: "
|
||
echo.
|
||
if not "!QQ_APP_ID!"=="" if not "!QQ_APP_SECRET!"=="" (
|
||
echo 正在绑定 QQ 机器人...
|
||
"%NODE_BIN%" openclaw.mjs channels add --channel qqbot --token "!QQ_APP_ID!:!QQ_APP_SECRET!"
|
||
echo.
|
||
set /p QQ_ALLOW=" 请输入你自己的 QQ 号(设置白名单,留空跳过): "
|
||
if not "!QQ_ALLOW!"=="" (
|
||
"%NODE_BIN%" openclaw.mjs config set channels.qqbot.allowFrom "\"!QQ_ALLOW!\""
|
||
echo 白名单已设置
|
||
)
|
||
echo.
|
||
echo QQ 机器人配置完成!
|
||
echo 请重启网关后生效(主菜单选 [4] 或 [17])
|
||
)
|
||
)
|
||
)
|
||
)
|
||
if /i "%CH%"=="c" (
|
||
echo.
|
||
echo 配置微信(社区插件)
|
||
echo 安装微信插件:
|
||
"%NODE_BIN%" openclaw.mjs plugins install @icesword760/openclaw-wechat
|
||
)
|
||
if /i "%CH%"=="d" (
|
||
echo.
|
||
echo 配置 Telegram
|
||
echo 1. 在 Telegram 中找 @BotFather
|
||
echo 2. 发送 /newbot 创建机器人
|
||
echo 3. 获取 Bot Token
|
||
echo.
|
||
"%NODE_BIN%" openclaw.mjs onboard
|
||
)
|
||
pause
|
||
goto MENU
|
||
|
||
:MIRROR
|
||
echo.
|
||
echo === 设置国内镜像源 ===
|
||
echo.
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" config set registry https://registry.npmmirror.com --location=project
|
||
echo npm 镜像已设置: registry.npmmirror.com
|
||
pause
|
||
goto MENU
|
||
|
||
:DOCTOR
|
||
echo.
|
||
echo === 诊断修复 ===
|
||
echo.
|
||
echo 提示: 选 [17] 可打开网页控制台,在浏览器中查看完整状态
|
||
echo.
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
"%NODE_BIN%" openclaw.mjs doctor --repair
|
||
pause
|
||
goto MENU
|
||
|
||
:BACKUP
|
||
echo.
|
||
echo === 备份当前状态 ===
|
||
echo.
|
||
set "TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%"
|
||
set "TIMESTAMP=%TIMESTAMP: =0%"
|
||
set "BACKUP_DIR=%UCLAW_DIR%backups\backup_%TIMESTAMP%"
|
||
mkdir "%BACKUP_DIR%" 2>nul
|
||
|
||
if exist "%PORTABLE_STATE_DIR%" (
|
||
xcopy "%PORTABLE_STATE_DIR%" "%BACKUP_DIR%\portable-state\" /e /i /q >nul 2>&1
|
||
echo [OK] 便携模式状态已备份
|
||
)
|
||
if exist "%OPENCLAW_DIR%\.env" (
|
||
copy "%OPENCLAW_DIR%\.env" "%BACKUP_DIR%\.env" >nul
|
||
echo [OK] .env 配置已备份
|
||
)
|
||
|
||
echo.
|
||
echo 备份完成! 位置: %BACKUP_DIR%
|
||
pause
|
||
goto MENU
|
||
|
||
:RESTORE
|
||
echo.
|
||
echo === 恢复备份 ===
|
||
echo.
|
||
set "BACKUP_BASE=%UCLAW_DIR%backups"
|
||
if not exist "%BACKUP_BASE%" (
|
||
echo 没有找到任何备份
|
||
pause
|
||
goto MENU
|
||
)
|
||
echo 可用备份:
|
||
dir /b "%BACKUP_BASE%" 2>nul
|
||
echo.
|
||
set /p RESTORE_NAME=" 输入备份名称: "
|
||
set "RESTORE_PATH=%BACKUP_BASE%\%RESTORE_NAME%"
|
||
|
||
if not exist "%RESTORE_PATH%" (
|
||
echo 备份不存在
|
||
pause
|
||
goto MENU
|
||
)
|
||
|
||
if exist "%RESTORE_PATH%\portable-state" (
|
||
xcopy "%RESTORE_PATH%\portable-state" "%PORTABLE_STATE_DIR%\" /e /i /q /y >nul 2>&1
|
||
echo [OK] 便携模式状态已恢复
|
||
)
|
||
if exist "%RESTORE_PATH%\.env" (
|
||
copy "%RESTORE_PATH%\.env" "%OPENCLAW_DIR%\.env" >nul
|
||
echo [OK] .env 已恢复
|
||
)
|
||
|
||
echo.
|
||
echo 恢复完成!
|
||
pause
|
||
goto MENU
|
||
|
||
:RESET
|
||
echo.
|
||
echo === 重置 OpenClaw ===
|
||
echo.
|
||
echo [1] 仅重置配置(保留凭据)
|
||
echo [2] 重置配置+凭据+会话
|
||
echo [3] 完全重置(恢复出厂)
|
||
echo [0] 取消
|
||
echo.
|
||
set /p RESET_CHOICE=" 选择重置级别: "
|
||
|
||
if "%RESET_CHOICE%"=="0" goto MENU
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
|
||
if "%RESET_CHOICE%"=="1" "%NODE_BIN%" openclaw.mjs reset --scope config
|
||
if "%RESET_CHOICE%"=="2" "%NODE_BIN%" openclaw.mjs reset --scope config+creds+sessions
|
||
if "%RESET_CHOICE%"=="3" (
|
||
set /p CONFIRM=" 确定完全重置? 输入 YES 确认: "
|
||
if "!CONFIRM!"=="YES" "%NODE_BIN%" openclaw.mjs reset --scope full
|
||
)
|
||
pause
|
||
goto MENU
|
||
|
||
:CLEANUP
|
||
echo.
|
||
echo === 清理缓存 ===
|
||
echo.
|
||
call "%NPM_BIN%" cache clean --force 2>nul
|
||
echo npm 缓存已清理
|
||
if exist "%PORTABLE_STATE_DIR%\logs" (
|
||
rmdir /s /q "%PORTABLE_STATE_DIR%\logs" 2>nul
|
||
echo 日志已清理
|
||
)
|
||
echo.
|
||
echo 清理完成!
|
||
pause
|
||
goto MENU
|
||
|
||
:SKILLS
|
||
echo.
|
||
echo === 预装技能 ===
|
||
echo.
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
"%NODE_BIN%" openclaw.mjs plugins list
|
||
pause
|
||
goto MENU
|
||
|
||
:CHINA_GUIDE
|
||
echo.
|
||
if exist "%UCLAW_DIR%中国用户指南.txt" (
|
||
type "%UCLAW_DIR%中国用户指南.txt"
|
||
) else (
|
||
echo 指南文件不存在
|
||
)
|
||
pause
|
||
goto MENU
|
||
|
||
:README
|
||
echo.
|
||
if exist "%UCLAW_DIR%使用说明.txt" (
|
||
type "%UCLAW_DIR%使用说明.txt"
|
||
) else (
|
||
echo 使用说明文件不存在
|
||
)
|
||
pause
|
||
goto MENU
|
||
|
||
:SYSINFO
|
||
echo.
|
||
echo === 系统信息 ===
|
||
echo.
|
||
echo 操作系统: %OS%
|
||
echo 处理器: %PROCESSOR_ARCHITECTURE%
|
||
echo Node.js: %NODE_VER%
|
||
echo U-Claw 路径: %UCLAW_DIR%
|
||
echo 便携配置: %ST_PORT%
|
||
echo.
|
||
if exist "%USERPROFILE%\.uclaw" (
|
||
echo 已安装路径: %USERPROFILE%\.uclaw
|
||
) else (
|
||
echo 电脑安装: 未安装
|
||
)
|
||
echo.
|
||
pause
|
||
goto MENU
|
||
|
||
:DASHBOARD
|
||
echo.
|
||
echo === 启动网关 + 打开网页控制台 ===
|
||
echo.
|
||
if not exist "%PORTABLE_CONFIG_PATH%" (
|
||
echo 你还没有完成便携配置。请先选 [4] 从 U 盘运行。
|
||
pause
|
||
goto MENU
|
||
)
|
||
if not exist "%OPENCLAW_DIR%\node_modules" (
|
||
cd /d "%OPENCLAW_DIR%"
|
||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com
|
||
)
|
||
cd /d "%OPENCLAW_DIR%"
|
||
echo 此窗口不要关闭,关闭后服务会停止。
|
||
echo.
|
||
"%NODE_BIN%" openclaw.mjs gateway run --allow-unconfigured --force
|
||
pause
|
||
goto MENU
|
||
|
||
:EXIT
|
||
echo.
|
||
echo 再见!
|
||
echo.
|
||
exit /b 0
|