-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquiver2vnote.ps1
160 lines (149 loc) · 4.68 KB
/
quiver2vnote.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<# 2019-4-6 17:17:00
脚本说明:
将quiver数据转换为vnotebook的数据格式
使用方法:
1. 修改源文件及目标文件路径后保存(21-22行)
2. 右键`使用Powershell运行`
注意事项:
1. 文件名含违禁字符的都处理了(详见57-60行)
2. 没有处理笔记之间的链接,东西少活累,自己碰到手动修改吧
3. 有极个别会报已存在,如果发现真的是缺失自己手动补齐
4. 后期请在软件内进行管理,直接操作数据本来就是件风险的事情
写作中遇到的坑:
1. .replace不是正则!只是字符串替换,我说怎么都没效果,浪费好几个钟头
2. 本来差不多了,发现还是报错,然后发现格式问题,于是才有的count计数判断首尾循环,做针对性处理
#>
$source_dir = "E:\Dropbox\Quiver.qvlibrary"
$output_dir_base = "E:\Users\Admin\Desktop\vnotebook_autocreate"
function main{
Remove-Item $output_dir_base -recurse
foreach($file in dir $source_dir *.qvnotebook){
cd $file.fullname
$note_name = (Get-Content meta.json | ConvertFrom-Json).name # 提取笔记本名称
$output_dir = $output_dir_base+"\"+$note_name
mkdir $output_dir # 生成目标文件夹
create_meta($file)
create_note($file)
}
cd $output_dir_base
create_bigmeta # 生成笔记本元数据
mkdir $output_dir_base\_v_recycle_bin # 生成回收站文件夹
}
# 生成笔记元数据
function create_meta($file){
# 文件头
$vnote_json = @"
{
"created_time": "2019-04-05T20:05:19Z",
"files": [
"@
# 文件中间
$count = 1
foreach ($file in dir meta.json -Recurse) {
$file_json = Get-Content $file.fullname | ConvertFrom-Json
$created_time = Get-Date ([timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($file_json.created_at))) -uformat "%Y-%m-%dT%H:%M:%SZ"
$modified_time = Get-Date ([timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($file_json.updated_at))) -uformat "%Y-%m-%dT%H:%M:%SZ"
$name = $file_json.title
if($name){ # 排除为空的meta
# 替换特殊字符
$name = $name.replace("|","or")
$name = $name.replace("""","'")
$name = $name.replace(":",":")
$name = $name -replace('/|\\|>|<|\*|\?',"")
$tags = $file_json.tags
if ($count -gt 1){ # 中间的循环每次加上换行
$vnote_json = $vnote_json + "`n"
}
$vnote_json = $vnote_json + @"
{
"attachment_folder": "",
"attachments": [
],
"created_time": "$created_time",
"modified_time": "$modified_time",
"name": "$name.md",
"tags": [
]
},
"@
if($count -eq $((dir meta.json -Recurse).length)-1){ # 减一是因为有一个空的meta,最后一次循环就少一
$vnote_json = $vnote_json.SubString(0,$vnote_json.Length-1)
}
}
$count = $count + 1
}
# 文件尾
$vnote_json = $vnote_json + @"
],
"sub_directories": [
],
"version": "1"
}
"@
New-Item $output_dir\_vnote.json -value $vnote_json
}
# 生成笔记
function create_note($file){
# 复制图片
$allpic = dir *.png,*jpg,*gif -Recurse
if($allpic){ # 图片不为空
mkdir $output_dir\_v_images
cp $allpic $output_dir\_v_images
}
# 创建文件
foreach($file in dir content.json -Recurse){
$file_json = Get-Content $file.fullname | ConvertFrom-Json
$name = $file_json.title
# 替换文件名特殊字符
$name = $name.replace("|","or")
$name = $name.replace("""","'")
$name = $name.replace(":",":")
$name = $name -replace('/|\\|>|<|\*|\?',"")
# 替换图片路径
$content = $file_json.cells[0].data
$content = $content.replace("quiver-image-url","_v_images")
$content = $content -replace(' =\d+x\d+',"") #他妹的,原来加杠才是正则
New-Item $output_dir\$name".md" -value $content
}
}
# 生成笔记本元数据
function create_bigmeta{
# 文件头
$vnote_json = @"
{
"attachment_folder": "_v_attachments",
"created_time": "2019-04-06T06:54:58Z",
"files": [
],
"image_folder": "",
"recycle_bin_folder": "_v_recycle_bin",
"sub_directories": [
"@
# 文件中间
$count = 1
foreach($file in dir *){
$dirname = $file.basename
if ($count -gt 1){ # 中间的循环每次加上换行
$vnote_json = $vnote_json + "`n"
}
$vnote_json = $vnote_json + @"
{
"name": "$dirname"
},
"@
if($count -eq $(dir *).length){ # 这里就不需要减一
$vnote_json = $vnote_json.SubString(0,$vnote_json.Length-1)
}
$count = $count + 1
}
# 文件尾
$vnote_json = $vnote_json + @"
],
"tags": [
],
"version": "1"
}
"@
New-Item $output_dir_base\_vnote.json -value $vnote_json # 写入文件
}
main