navicat命令行工具navicatcli.exe不支持调用gui保存的批处理作业,仅支持--query执行sql文件和--sync执行.ncx同步配置;--batch参数不存在,尝试将报“unknown option”。

navicatcli.exe 调用批处理作业必须用 --query,不是 --batch
Navicat 15 的命令行工具 navicatcli.exe 不支持直接执行 GUI 中“批处理作业”列表里的任务(比如你右键新建的 Backup_mydb 或 Export_users)。它只认两种动作:--query(执行 SQL 文件)和 --sync(执行 .ncx 同步配置)。所谓“已保存的批处理作业”,本质是 Navicat 自己维护的内部任务元数据,navicatcli.exe 完全不读取那个列表。
如果你在 GUI 里建了一个“导出 Excel + 发邮件”的批处理作业,想用命令行静默跑——这条路走不通。你得退回去,把其中的 SQL 部分单独抽出来存为 .sql 文件,再用 navicatcli.exe --query 调用。
-
--batch参数根本不存在,文档和 help 输出里都查不到,任何尝试都会报Unknown option '--batch' - GUI 中“设置计划任务”按钮背后调用的其实是 Windows
schtasks,不是navicatcli.exe;它只是帮你生成一个系统级定时任务,触发时仍会拉起 Navicat GUI 进程 - 真正能静默运行的,只有
--query和--sync两条路径,且都要求前置条件满足(见下条)
执行前必须确认的三件事:连接名、编码、密码
navicatcli.exe --query "MyDB" "D:\scripts\report.sql" 看似简单,但静默失败时几乎从不报错——进程直接退出,日志为空。卡点永远在这三个地方:
-
"MyDB"必须和 Navicat 左侧「连接」列表里显示的名称**逐字一致**(区分大小写、空格、标点),不能是别名或显示名缩写 -
report.sql必须是 **UTF-8 无 BOM** 编码;用 VS Code 或 Notepad++ 打开,右下角看编码标识,BOM 会导致中文注释解析失败、语句截断 - 该连接必须已在 Navicat GUI 中**成功测试过并保存了密码**;CLI 不会弹窗输密,没存密就卡住或静默退出
Windows 任务计划中调用 navicatcli.exe 的关键配置
即使命令本身写对了,在任务计划里跑失败,大概率是环境权限问题。schtasks 创建的任务默认以“仅当用户登录时”运行,而 navicatcli.exe 依赖图形子系统初始化(哪怕不显示窗口),登录态缺失会导致连接驱动加载失败。
- 任务属性 → 「常规」页必须勾选:不管用户是否登录都要运行 + 使用最高权限运行
- 「操作」页的“程序或脚本”填完整路径:
"C:\Program Files\PremiumSoft\Navicat 15\navicatcli.exe"(含英文双引号,路径有空格必包) - “添加参数”填:
--query "MyDB" "D:\scripts\report.sql"(注意:三个参数之间是空格,不是逗号或分号) - 首次调试建议加日志重定向:
--query "MyDB" "D:\scripts\report.sql" >> D:\logs\navicat.log 2>&1,否则失败无声无息
替代方案:用 navicat.exe --sync 跑同步任务更稳定
如果你的“批处理作业”核心是跨库同步(比如 MySQL → PostgreSQL),那别硬套 --query。先在 GUI 里用「工具 → 数据同步」建好逻辑,保存为 users_sync.ncx,再用 navicat.exe --sync 调用——这个路径对 Premium 版本更可靠,且支持隐藏进度窗口(在同步设置 → 高级里勾选)。
-
navicat.exe(不是navicatcli.exe)才支持--sync,路径同上,也需英文双引号包裹 - .ncx 文件只能由 Premium 图形界面生成,不能手写或改后缀;内容是加密二进制,编辑即损坏
- 同步任务若涉及外键或字符集差异,务必在 GUI 设置中勾选「忽略不存在的表」和「跳过具有相同数据的记录」,否则 CLI 下容易中断
真正难的从来不是写哪条命令,而是搞清 Navicat 哪些功能暴露给了 CLI、哪些只活在 GUI 里——它没有统一的任务抽象层,navicatcli.exe 和 navicat.exe 是两套独立接口,混用必踩坑。











