Navicat 17 不支持内置调度,多步骤批处理作业(.njob)仅按序执行查询、导出等原子操作,必须由 Windows 任务计划程序或 cron 外部调用 navicat.exe --run-job 触发;步骤间无变量共享,导出需勾选“使用上一个任务的结果”,路径不支持日期变量,须在调度层动态生成。

Navicat 17 本身不支持“创建多步骤的批处理调度任务”——它只提供批处理作业(.njob)的编排能力,但**不负责调度执行时间**;所谓“调度”,必须由 Windows 任务计划程序、cron 或其他外部工具完成。
什么是真正的「多步骤批处理作业」
在 Navicat 17 中,“多步骤”指一个 .njob 文件内按顺序执行多个独立操作,比如:先运行查询 → 再导出为 CSV → 接着导入到另一张表 → 最后发邮件通知(需调用外部命令)。但注意:Navicat 自身不执行邮件发送或文件重命名等系统级操作,只能靠导出脚本 + 外部调用实现。
- 所有步骤必须在「批处理作业」界面中拖入,并手动调整上下顺序;顺序错误会导致后续步骤读不到前步输出(例如导出任务放在查询之前,结果为空)
- 每个步骤本质上是 Navicat 支持的原子动作:查询(
.nq)、导出、导入、备份、数据传输、运行 SQL 脚本等 - 不支持条件判断(如“如果查到 0 行就跳过导出”)、循环、变量赋值;逻辑分支必须拆成多个
.njob并由调度器控制调用路径
如何把多个操作串进一个 .njob
关键不是“怎么加步骤”,而是“怎么让每一步拿到上一步的结果”。Navicat 的串联依赖显式的数据流定义,不是隐式共享结果集。
- 查询步骤必须保存为
.nq文件(不能是未保存的临时查询),且路径为绝对路径,否则.njob加载失败 - 导出步骤必须选中“使用上一个任务的结果”,而不是重新连库查一遍;否则即使前面查了 10 万行,导出时也可能导出空
- 导入步骤若目标表结构与源不一致,Navicat 不会自动映射字段,需提前在「字段映射」里手动配对,否则静默跳过或报错
Column count doesn't match value count - 若中间要调用外部命令(如压缩 CSV、发邮件),得用「运行外部程序」步骤,并确保该程序在运行环境中已安装、PATH 可达,且参数中路径不含空格或中文
为什么「自动运行」按钮不能当定时器用
界面上那个齿轮+播放图标的 自动运行 按钮,只是手动触发当前 .njob 的快捷方式。它不解析时间表达式,不维护执行历史,也不支持失败重试——点击一次,执行一次。
- 你无法在 Navicat 界面里设置“每天 2:00 执行”或“每 15 分钟轮询一次”
- 尝试双击
.njob文件直接运行会失败:它必须由navicat.exe --run-job "path\to\job.njob"启动,且 Navicat 主进程无需打开 - Windows 下若用任务计划程序调用,注意勾选“不管用户是否登录都要运行”,并配置“最高权限”,否则可能因权限不足导致导出文件写入失败
导出路径带日期的实操陷阱
Navicat 的导出任务中,“目标文件”路径不支持 %DATE%、$(date) 这类变量,填进去会被当作字面量创建文件,比如生成 access_%DATE%.csv 而非 access_20261021.csv。
- 正确做法是在调度层处理:Windows 任务计划程序中用 PowerShell 脚本动态生成带日期的路径,再传给
--run-job - Linux/macOS 下,
cron无法直接插值,得写 shell 脚本,用date +\%Y\%m\%d拼出文件名,再调用 navicat 命令 - 别试图在
.njob里用「运行外部程序」去改名——导出和改名之间有竞态,容易出现“文件正被占用”错误
真正卡住人的地方往往不在 Navicat 界面操作,而在于路径权限、驱动加载、字符编码(尤其导出含中文字段时 CSV 打开乱码)、以及调度器与 Navicat 运行上下文的隔离性——这些细节不爆错,但会让任务看似成功实则没产出。


















