## 一、问题情况
OpenClaw 装好以后,会在用户目录下生成一个默认的启动脚本 gateway.cmd:
|
1 |
C:\Users\用户名\.openclaw\gateway.cmd |
双击运行,Gateway 没有启动,报错:
|
1 2 3 4 5 6 7 8 9 |
node:internal/modules/cjs/loader:1423 throw err; ^ Error: Cannot find module 'C:\Users\锟斤拷\AppData\Roaming\npm\node_modules\openclaw\dist\index.js' code: 'MODULE_NOT_FOUND' Node.js v25.2.1 |
## 二、问题原因
打开 gateway.cmd 看一下内容:
|
1 2 3 4 |
@echo off set "TMPDIR=C:\Users\用户名\AppData\Local\Temp" ... "C:\Program Files\nodejs\node.exe" C:\Users\用户名\AppData\Roaming\npm\node_modules\openclaw\dist\index.js gateway --port 18789 |
路径里直接写死了中文用户名。当 CMD 执行 bat 脚本时,中文路径经过编码转换变成了经典的"锟斤拷"乱码,Node.js 自然找不到对应的文件。
## 三、解决办法
把 gateway.cmd 里写死的中文路径替换成 %APPDATA% 环境变量:
|
1 |
set "GATEWAY_JS=%APPDATA%\npm\node_modules\openclaw\dist\index.js" |
%APPDATA% 是 Windows 系统环境变量,自动指向当前用户的 AppData\Roaming 目录,无论用户名是中文还是英文都能正确解析。
再加一行 chcp 65001 确保中文路径在 CMD 里编码正确:
|
1 2 |
@echo off chcp 65001 >nul |
另外为了方便后续操作(一些 agent 工具需要管理员权限),在脚本里加了自提权代码。双击脚本时会自动弹 UAC 窗口请求管理员权限。
如果不需要自动提权,删掉下面这一行即可:
|
1 |
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit |
删除后直接双击是以用户权限运行。如果临时需要管理员权限,右键脚本 → 以管理员身份运行 即可。
最终可用的启动脚本:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@echo off chcp 65001 >nul :: 自提权:以管理员身份运行(不需要可删除本行) %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit cd /d "%~dp0" set "NODE_PATH=C:\Program Files\nodejs\node.exe" set "GATEWAY_JS=%APPDATA%\npm\node_modules\openclaw\dist\index.js" set "OPENCLAW_GATEWAY_PORT=18789" start "OpenClaw Gateway" "%NODE_PATH%" "%GATEWAY_JS%" gateway --port 18789 echo ===================================== echo OpenClaw Gateway 已启动 echo ===================================== echo. echo WebSocket: ws://127.0.0.1:18789 echo Dashboard: http://127.0.0.1:18789/?token=xxxx echo. pause |
## 四、总结
OpenClaw 默认生成的 gateway.cmd 直接写死了中文用户名路径,在 CMD 执行时编码转换导致路径乱码,Node.js 找不到模块报错。改成 %APPDATA% 环境变量代替中文路径,加上 chcp 65001 确保编码一致,再补个自提权,三合一解决。