为知笔记是一款不错的笔记软件,从 2013 年用到现在,整整用了十个年头。令人难以置信的是,这软件整整十年居然都没有涨价,60 元/年的价格,真真是良心价。
从为知笔记迁移,主要基于以下的原因(用其他笔记的道友也可以考虑):
终于在前不久的某天,我实在是无法忍耐了。
整理文档看起来简单,无非就是将原来的文档从为知笔记导出,再将文档导入到 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则更简单,直接将文件复制到相应的硬盘目录中即可。
目前已完成了一部分重要文档的整理工作。
(完)
联系客服