为知笔记是一款不错的笔记软件,从 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之道
评论前必须登录!
注册