把印象笔记 / Evernote 老版 Mac 客户端已同步到本地的笔记数据批量导出为 Markdown。 无需手动逐个导出 ENEX,无需申请 API token,一条命令导出全部笔记。
Export all notes from the legacy Yinxiang Biji (印象笔记) / Evernote Mac client's local data store to Markdown — no manual ENEX export, no API token required. Its unique feature: lossless recovery of the original Markdown source that Yinxiang hides inside ENML for Markdown-mode notes.
- 新版印象笔记 / Evernote 10.x 客户端阉割了批量 ENEX 导出,几百上千条笔记只能手动逐个复制
- 印象笔记开发者 token 申请入口时常关闭,API 之路走不通
- 但只要你装过老版 Mac 客户端(印象笔记 9.x / Evernote Legacy)并完整同步过, 全部笔记的正文、附件、元数据其实都已经在你的硬盘上——本工具直接读它们
与 Yarle、 evernote2md 等 ENEX 转换器不同, 本工具解决的是上游问题(拿不到 ENEX),并且有两个独有能力:
- Markdown 原生笔记无损还原——印象笔记的 Markdown 笔记会把 MD 原文
URL 编码后藏在 ENML 的隐藏
<center>块里。普通转换器只能把渲染后的 HTML 有损地转回 Markdown(嵌套列表层级会丢),还会把隐藏块输出成乱码; 本工具直接解码原文,一字不差 - 思维导图笔记转文字大纲——导图的 JSON 树同样藏在隐藏块里, 本工具把它解析成嵌套列表,让导图内容变得可搜索、可被 AI 阅读
| 环境 | 支持 |
|---|---|
| macOS + 印象笔记 9.x(老版客户端) | ✅ 已在 9.7.35 上验证 |
| macOS + Evernote Legacy(国际版老客户端) | ✅ 理论支持(同架构),欢迎反馈 |
| 印象笔记 / Evernote 10.x(新版客户端) | ❌ 本地数据结构完全不同 |
| Windows 老版客户端 | ❌ 本地存储是另一套(.exb),未逆向 |
前提:老版客户端至少完整同步过一次(笔记正文需已缓存到本地)。
# 只需要 macOS 自带的 Python 3,零依赖
python3 yinxiang2md.py默认导出到 ~/Desktop/印象笔记导出/,按「笔记本组 - 笔记本」分目录,
图片附件放各目录的 _resources/ 下,每个文件带 frontmatter
(创建/更新时间、标签、来源网址),可直接作为 Obsidian vault 打开。
富文本笔记(非 Markdown 模式写的)需要经 ENEX → Markdown 转换, 这一步调用 Yarle,需要 Node.js:
- 装了 Node:自动完成,无感
- 没装 Node:富文本笔记输出为标准 ENEX 文件(
_enex/目录), Markdown 原生笔记不受影响照常导出;之后可装 Node 重跑, 或用 Yarle 图形版自行转换 ENEX
也可以 pipx 安装后用 yinxiang2md 命令:
pipx install .
yinxiang2md --help-o, --output DIR 输出目录(默认 ~/Desktop/印象笔记导出)
--dry-run 只统计笔记分类,不写任何文件,先看看再决定
--no-attachments 只要文字,跳过全部图片/附件
--skip-yarle 不调用 Yarle,富文本笔记仅输出 ENEX
--list-accounts 列出本机检测到的账号
--account N 多账号时指定第 N 个
--account-path DIR 直接指定账号数据目录(高级用法)
老版客户端把数据存在
~/Library/Containers/com.yinxiang.Mac/.../accounts/<host>/<userid>/:
localNoteStore/LocalNoteStore.sqlite— CoreData 元数据库 (标题、笔记本、标签、时间、附件 hash)content/<笔记UUID>/content.enml— 每条笔记的 ENML 正文content/<笔记UUID>/<附件UUID>.*— 附件原始文件
工具全程只读这些数据(数据库先复制到临时目录再访问,绝不碰原文件),然后:
- 解析每条笔记的隐藏块,分类为「MD 原生 / 富文本 / 含思维导图」
- MD 原生:解码原文,按附件 hash 重写图片引用并落地文件
- 富文本:组装标准 ENEX(隐藏块在源头剥离,避免乱码),交给 Yarle 转换
- 思维导图:JSON 树渲染为嵌套列表,附在对应笔记末尾
CoreData 的关联表名(如 Z_10TAGS)随客户端版本变化,工具会动态发现而非硬编码。
- 回收站中的笔记不导出
- 加密笔记(
en-crypt)保持加密原样 - 笔记间链接(
evernotecid://...ENNote...)原样保留,不转为相对路径 - 网页剪藏类笔记的转换质量取决于 Yarle,原网页自带的脚本残留可能出现在正文中
python3 tests/test_basic.py测试使用合成数据,不需要真实的印象笔记环境,也不需要 Node.js。
- Yarle 完成富文本 ENEX → Markdown 的转换
- 隐藏 MD 原文块、思维导图 JSON 的格式细节来自对印象笔记 9.7.35 本地数据的逆向分析