现象 标题里一个冒号 进程启动前就崩
在「不可能片场」的掘金日更流水线里,发布由 matrixmedia.exe cli publish-article 经封装脚本驱动。某次把标题写成「AI视频局部重绘:定点修掉穿帮帧」——无论全角还是半角冒号——EXE 在打印 [startup] 启动日志之前就退出,退出码 -1,MMCLI_OUT 是空文件,主日志零行。没有半点报错,进程像没活过。
对照实验很快把范围收窄:
accounts子命令、纯 ASCII 参数、--help→ 正常;- 中文分类(如「人工智能」)、无冒号的中文标题 → 正常;
- 只要标题里出现
:或:→ 必崩。
结论很清楚:这不是中文问题,是冒号。
# 会崩(标题含冒号)
-t "AI视频局部重绘:定点修掉穿帮帧"
# 正常(冒号换成空格)
-t "AI视频局部重绘 定点修掉穿帮帧"
根因 cmd.exe 重建命令行时把冒号当分隔
封装脚本 mmcli_env.cmd 从环境变量 J_TITLE 取出标题,重新拼出一行命令交给 cmd.exe 执行。问题出在这一层:Windows 下命令行参数最终要经 cmd.exe 的解析,冒号在路径与参数语境里被当成某种分隔或驱动符前缀,引号与转义没能兜住它,于是整条命令在真正进入 EXE 之前就解析失败,EXE 连启动日志都来不及打。
换句话说,崩的不是 Electron 运行时,是「命令行重建」这一步。这也解释了为什么 accounts、中文分类都正常——它们不带冒号,重建出来的命令行是干净的。
@echo off
chcp 65001 >nul
set "ELECTRON_RUN_AS_NODE="
set "EXE=C:\Users\molan\WorkBuddy\2026-08-28-23-12-48\MatrixMedia\build\win-unpacked\matrixmedia.exe"
"%EXE%" --no-sandbox --disable-gpu-sandbox cli publish-article ^
-p "%J_PLATFORM%" --phone "%J_PHONE%" ^
-t "%J_TITLE%" --category "%J_CATEGORY%" --file "%J_FILE%" > "%MMCLI_OUT%" 2>&1
exit /b %ERRORLEVEL%
绕开 env 传参 让中文和冒号都走 UTF-16
第二个坑是编码:即便命令行能拼出来,中文标题经 cmd.exe 的 argv 会按 GBK 解码,PowerShell 直接传中文 argv 会变成 ?? is not recognized。Windows 进程间环境变量是 UTF-16,中文不乱码。所以正解是把标题、分类、路径全部塞进环境变量,由封装脚本读环境变量重建命令:
$env:J_PHONE="不可能片场"
$env:J_TITLE="AI视频局部重绘 定点修掉穿帮帧"
$env:J_CATEGORY="人工智能"
$env:J_FILE="C:\Users\molan\.zcode\workspace\default\matrixmedia-agent\juejin\2026-09-14-local-inpaint.md"
$env:J_PLATFORM="juejin"
$env:MMCLI_OUT="C:\Users\molan\AppData\Local\Temp\mmcli-out.txt"
Remove-Item Env:ELECTRON_RUN_AS_NODE -ErrorAction SilentlyContinue
& "C:\Users\molan\.zcode\workspace\default\matrixmedia-agent\mmcli_env.cmd"
Remove-Item Env:ELECTRON_RUN_AS_NODE 是另一处必要清理:宿主环境带进来的这个变量会让 Electron 退化成 node,报找不到模块的错。清掉它,EXE 才能以正常 Electron 进程启动。
两条路 空格替代 或 引号包裹的边界
治本最简单:标题里一律用空格或中文顿号替代冒号。本文标题就是这么处理的——「AI视频局部重绘 定点修掉穿帮帧」一举成功,49 秒跑完、退出码 0。
如果业务上标题必须用冒号(比如「主标题:副标题」结构),那就要在封装层把标题整体用引号包死、并确认 cmd.exe 不会再做二次拆分;但实测引号在重建命令行时并不可靠,所以流水线统一约定:发布标题禁冒号,用空格。这条规则已经写进 HANDBOOK,作为发布前的硬校验之一。
顺带 H1 也要同步改 避免二次人工
踩过一次才注意到:Markdown 文件的 H1(# AI视频局部重绘:定点修掉穿帮帧)和发布标题必须一致,否则平台侧上架后标题与正文 H1 不符,还要人工再改一次。所以改标题时连 H1 一起改成同款空格版——「文件 H1 = 发布标题」是流水线的固定约定,省掉回炉。
小结 三个坑叠在一起才显得诡异
- 冒号击穿命令行重建 → EXE 启动前崩(根因);
- 中文经 argv 走 GBK 乱码 → 用 env 变量绕开;
- 宿主
ELECTRON_RUN_AS_NODE让 Electron 退化成 node → 发布前清掉。
三个都治住后,纯 env 传参 + 无冒号标题 = 稳定成功。这套封装(mmcli_env.cmd + PowerShell 调起)现在是我每天发稿的默认路径。