吾生有涯 学海无涯
析模有界 知识无界

迁移为知笔记

内容纲要

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

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

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

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

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

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

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

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

/// 
/// 解压文件到当前路径下
///

/// ziw文件名
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);
}
}

///
/// 将wiz文件转化为md文件,放置在原位置
///

/// html文件完整路径
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 = "
.+?
"
;
MatchCollection ms = Regex.Matches(str, divs);

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

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

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

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

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

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

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


(完)

本篇文章来源于微信公众号: CFD之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《迁移为知笔记》
文章链接:https://www.topcfd.cn/36213/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册