为知笔记是一款不错的笔记软件,从 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> </div>", ""); sb.Replace("<div>", ""); sb.Replace("</div>", ""); sb.Replace(">", "> "); sb.Replace("<br>", "\n"); sb.Replace("</br>", "\n"); sb.Replace("&", "&"); sb.Replace("<", "<"); //将正文存入md文件,因为title中自带.md,所以干脆当做扩展名处理了 File.WriteAllText(path + "\\" + fileName + ".md", sb.ToString()); }
只需要几秒钟,几千篇文档瞬间转化成了 markdown 文件。 不过过程还是过于麻烦,有空了整一个自动从为知网站上下载文档,然后自动转换的代码。 文件转完了,下一步是考虑文件转移的事情。目前的方案是转移到Obsidian及我来笔记。其中我来笔记用于网络同步,Obsidian用于备份。 我来笔记支持批量导入和导出markdown文件,可以快速将从为知笔记转化的大量文档迅速转移到笔记中。Obsidian则更简单,直接将文件复制到相应的硬盘目录中即可。 目前已完成了一部分重要文档的整理工作。 ![](http://image109.360doc.com/DownloadImg/2023/10/2316/274255828_1_20231023041954588_wm.png)
(完)
|