我的论文以file链接的形式链接到ob笔记里,论文不放进笔记库(笔记库放过多的东西会卡顿),阅读用的是本地阅读器。使用中的一个问题是,pdf移动位置,链接就失效了。为解决这个痛点,写了修复file链接工具。
脚本需要输入两个参数,一个是论文阅读笔记的文件夹,一个是论文存放文件夹,设置好运行即可。
对于其它附件,比如视频等,如果是file链接,也可以用此脚本修复,把pdf后缀改成相应后缀即可。
对于不同文件夹相同文件名的文件,匹配时会选择文件夹名字在前的。(a 论文
、论文
两个文件夹有同名文件时,匹配a 论文
文件夹)。
脚本只会修改链接目标不存在的链接,不会修改链接目标存在的链接(a 论文
、论文
两个文件夹有同名文件时,链接到论文
的链接不会被修改)。
3 个赞
FileEncoding, UTF-8-RAW ;20210314_1506
/*
220227_211657,改用AHK实现,python手生,类不会用。
220228_162257,pdf文件列表排序,使得可以通过调整文件夹名让脚本选择指定文件夹文件。
*/
;220227_212020,通用变量区。
论文库 := "C:\论文\"
; 笔记文件夹 := "H:\论文\"
笔记文件夹 := "H:\笔记\笔记\6 阅读笔记\"
;220227_211730,遍历pdf,转义成url格式,生成file:///数组
PathList := ""
Loop , Files, %论文库%*.pdf, R ; 递归子文件夹,此处指定为md文件;
{
A_LoopFileFullPath1 := SksSub_UrlEncode(A_LoopFileFullPath)
PathList := PathList . A_LoopFileFullPath1 . "`n"
}
Sort, PathList, R ; R 选项使得以逆序排列. 请参阅 Sort 了解其他选项.220228_162108
;220227_211939,转义路径为url,原来的会把汉字也转义,不太好。
SksSub_UrlEncode(str, enc="UTF-8")
{
str := StrReplace(str," ","%20")
; str := StrReplace(str,":","%3A")
str := StrReplace(STR,"\","%5C")
encoded := "file:///" . str
Return encoded
}
;220227_211813,遍历md文件,检查是否有file链接,如果有验证是否在file数组里,是则比较是否正确,修改,否则输出日志
Loop , Files, %笔记文件夹%*.md, R ; 递归子文件夹,此处指定为md文件;
{
笔记内容 := FileOpen(A_LoopFileFullPath, "r").Read()
新笔记内容 := ""
index := 0
搜索位置 := 1
链接数组 := []
loop 999
{
index := index +1
结果位置 := RegExMatch(笔记内容, "file:///(.*?).pdf",链接, 搜索位置)
if (链接 = "")
break
链接数组.Insert(链接)
搜索位置 := 结果位置+StrLen(链接)
链接 := ""
}
for index, element in 链接数组 ; 220228_001853,各链接
{
;220228_002722,如果在地址列表中,则正确,如果不在,就修复
; msgbox,% element
if instr(PathList,element)
{
; MSGBOX,在列表中
Continue
}
Else
{
;220228_002902,拆分出文件名
RegExMatch(element, "file:///(.*)%5C",路径,1)
文件名 := StrReplace(element,路径)
; msgbox,% 文件名 . "不在列表中`n" . 路径
;220228_013102,含有文件名的路径认为是正确路径。
Loop, parse, PathList, `n, `r ; 在 `r 之前指定 `n, 这样可以同时支持对 Windows 和 Unix 文件的解析.
{
if instr(A_LoopField,文件名)
新笔记内容 := StrReplace(笔记内容,element,A_LoopField)
}
}
}
if (新笔记内容 != "")
FileOpen(A_LoopFileFullPath, "w").Write(新笔记内容)
}
库内的链接(md格式)修复用pytho做了,有空发上来。
做成exe,用窗口选择笔记所在文件夹和论文所在文件夹会更方便些,懒得做,有人有需要我再做。
有空加上未成功修复链接记录功能,把未修复的链接(目标不存在,又没找到目标)汇总,以便手动修复。
1 个赞
yeyeye
4
求分享!ob对我来说使用的一大痛点就是与本地文件的联动,看了大佬的的几个帖子感觉帮助很大!非常感谢