打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
迁移为知笔记
userphoto

2023.10.23 四川

关注

为知笔记是一款不错的笔记软件,从 2013 年用到现在,整整用了十个年头。令人难以置信的是,这软件整整十年居然都没有涨价,60 元/年的价格,真真是良心价。

从为知笔记迁移,主要基于以下的原因(用其他笔记的道友也可以考虑):

  • 数据安全。为知笔记虽然支持本地部署,也支持将数据导出到本地,但本地部署过于复杂,默认情况下数据文件是保存在网络服务器中的。
  • 不知道软件还能活多久。我一直使用的是老版的为知笔记,因为其支持利用外部 markdown 编辑器进行文件编辑,也支持导出 markdown 文件。厂家后面搞了个重构版,但不支持外部编辑器,也不能导出 markdown 文件。重构版和当前满大街的笔记软件并无区别。可恨的是官方似乎对老版的支持力度非常弱,一年也难得更新一次,我很担心官方会在某一天直接宣布关闭老版本。
  • 软件比较老,属于第一代笔记软件,不支持新一代笔记软件的各种特性(如双链、知识图谱等),后续版本也不可能支持这些特性。
  • 纯粹是用腻了。用了这么多年,各种文档充斥其中缺少整理,脏乱差看着就糟心。

终于在前不久的某天,我实在是无法忍耐了。

整理文档看起来简单,无非就是将原来的文档从为知笔记导出,再将文档导入到 Obsidian 中。这里 Obsidian 并不需要导入,只需要将文件拷贝到 Obsidian 的文件夹中即可。所以问题给到了如何导出为知笔记文档上。

为知笔记提供了手工逐篇导出 markdown 的功能,并不支持批量导出大量文档。而且对于从未打开过的文档,还得使用鼠标点过让其下载到本地才能导出。

几千篇文档一个个的导出,这简直就不是人力所能为的事情。不过天无绝人之路之路,当将文档打开时,为知笔记会从服务器中将对应的文件下载到本地,只不过文件格式不是 markdown,而是一个扩展名为 ziw 的压缩文件,解压出来是一个 html 文件,只需要将 html 中的内容提取出来就可以了。

所以后面的问题就是如何批量提取压缩包中的文件。这显然可以很容易地通过程序来实现。下面是用 c# 实现的核心代码(从历史文件中翻出来的,2014 年写的)。

/// <summary>
/// 解压文件到当前路径下
/// </summary>
/// <param name="zipFileName">ziw文件名</param>
private void UnZiwFile(string zipFileName)
{
string path = GetPathInfo(zipFileName)[0]; //文件上级目录
string fileName = GetPathInfo(zipFileName)[1];

//解压ziw文件,得到index.html文件,解压后放在当前路径下
(new FastZip()).ExtractZip(zipFileName, path, "");

//修改index.html文件名称
string path_newfolder = path + "\\temp"; //定义一个新的路径
if (!Directory.Exists(path_newfolder))
{
Directory.CreateDirectory(path_newfolder);
}

string path_htmlfile = path + "\\index.html";
if (File.Exists(path_htmlfile))
{
FileInfo fi = new FileInfo(path + "\\index.html");
fi.MoveTo(path_newfolder + "\\" + fileName + ".html");
fi.MoveTo(path + "\\" + fileName + ".html");
Directory.Delete(path_newfolder);
}
}

/// <summary>
/// 将wiz文件转化为md文件,放置在原位置
/// </summary>
/// <param name="filePath">html文件完整路径</param>
private void File_Html2MD(string htmlFilePath)
{
string path = GetPathInfo(htmlFilePath)[0]; //文件上级目录
string fileName = GetPathInfo(htmlFilePath)[1]; //没有扩展名的文件名

//读取index.html文件,获取title及MD中的内容
StringBuilder sb = new StringBuilder();
string str = File.ReadAllText(htmlFilePath);

//利用正则表达式匹配文档内容
string divs = "<div>.+?</div>";
MatchCollection ms = Regex.Matches(str, divs);

foreach (Match m in ms)
{
sb.AppendLine(m.Groups[0].Value.ToString());
}

sb.Replace("<div>&nbsp;</div>", "");
sb.Replace("<div>", "");
sb.Replace("</div>", "");
sb.Replace("&gt;", "> ");
sb.Replace("<br>", "\n");
sb.Replace("</br>", "\n");
sb.Replace("&amp;", "&");
sb.Replace("&lt;", "<");
//将正文存入md文件,因为title中自带.md,所以干脆当做扩展名处理了
File.WriteAllText(path + "\\" + fileName + ".md", sb.ToString());
}

只需要几秒钟,几千篇文档瞬间转化成了 markdown 文件。

不过过程还是过于麻烦,有空了整一个自动从为知网站上下载文档,然后自动转换的代码。

文件转完了,下一步是考虑文件转移的事情。目前的方案是转移到Obsidian及我来笔记。其中我来笔记用于网络同步,Obsidian用于备份。

我来笔记支持批量导入和导出markdown文件,可以快速将从为知笔记转化的大量文档迅速转移到笔记中。Obsidian则更简单,直接将文件复制到相应的硬盘目录中即可。

目前已完成了一部分重要文档的整理工作。


(完)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
12款笔记管理和在线协作工具推荐
Obsidian是什么以及它能用来做什么
科研笔记神器:几分钟将PDF转换成文本,摘取知识点,构建笔记
地表最强笔记软件—配合NAS实现了我的多端异地同步
学习神器Obsidian入门教程,从0-1搭建你的个人知识体系
常用的3个工作流工具
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服