前言
- 因为myBase的本地相应速度快,目录树好看,所以在本地环境一直用myBase,而且近期升级到了7.0
- 因为有跨平台共享的需求,所以需要云笔记
- 因为为知笔记国产,界面简洁,便宜等原因,云笔记app选择为知
- 因为现成的工具只支持myBase 5.x/6.x 的迁移,所以手动写了个脚本
原理
- myBase 7.x采用所有笔记皆目录,再在目录下存放4种格式的文件来存放笔记,和myBase 5.x/6.x直接按笔记名保存为文件不同,因此mybase2wiz插件失效
- 经过寻找,mybase可以导出目录树,为知笔记可以导入html/md/text,因此脚本的作用就将mybase导出结果修改为为知笔记导入后,笔记名称保持不变
步骤
- mybase选中所有要导出的目录,菜单栏选择导出->导出磁盘目录树->选择文件夹->确认(图后补)
- 设置脚本的root_path为刚才导出文件的父目录
- 将文后的脚本复制后保存到xxx.py(xxx自定义即可)
- 启动cmd命令行(需要已经安装了python)
python xxx.py
- 启动为知笔记,选择要存放新笔记的目录,菜单栏->导入->(待确认)->确认
- 等待导入完成,检查一下是否按目录,按原笔记名称已经导入成功
- done
脚本源代码
# _*_ coding: utf-8 _*_
import os
root_path = 'C:/Users/Hht/Desktop/temp/processed/'
def list_dir(dir):
if os.path.isdir(dir):
# 递归进入子目录
sub_dirs = os.listdir(dir)
for sub_dir in sub_dirs:
list_dir(dir + '/' + sub_dir)
else:
# 对最深层级的文件进行操作
idx = dir.rfind('/')
print('dir: ' + dir)
file_name = dir[idx + 1:]
# 保留文档结尾 到 suffix
suffix_idx = file_name.rfind('.')
suffix = file_name[suffix_idx:]
print('suffix ' + suffix)
dir_idx = dir[:idx].rfind('/')
p_dir_name = dir[dir_idx + 1:idx]
# 保留文件倒数第二级目录到p_dir
p_dir = dir[:dir_idx]
print('dir_name: ' + p_dir_name)
print('p_dir_name: ' + dir[:idx])
# 讲mybase文件重命名为父目录名字+原后缀
os.rename(dir, p_dir + os.path.sep + p_dir_name + suffix)
print('rename: ' + dir + ' to: ' + p_dir + os.path.sep + p_dir_name + suffix)
print('----------')
# 删去已经将文件重命名了的文件夹
def remove_empty_dir(dir):
if os.path.isdir(dir):
sub_dirs = os.listdir(dir)
if len(sub_dirs) < 1:
try:
print('crt rmdir: ' + dir)
os.rmdir(dir)
except BaseException as e:
pass
for sub_dir in sub_dirs:
remove_empty_dir(dir + '/' + sub_dir)
list_dir(root_path)
remove_empty_dir(root_path)
后语
可能对于不写python的同学,安装python,跑脚本,比直接拷贝过去要烦人的多吧,23333