使用各種筆記軟體時,最後遇到的一個困擾就是 本地端檔案要怎麼連結。最簡單的方式當然是把檔案丟到雲端服務,然後取得連結即可。然而,有些資料你就是不想放到網路上:一方面為了保密,另一方面也不打算跨裝置或多人共用。
本地端檔案連結的問題
在本地端,你可以把檔案路徑用瀏覽器開啟,例如 D:\ 就會變成 file:///D:/,但是點擊時通常會被瀏覽器當成下載,因為瀏覽器對你電腦裡的檔案路徑沒有完整權限。
如果你用過 Obsidian、Logseq 或 Eagle,會發現它們有專屬的協議,例如 Eagle:\\ 開頭的自訂協議。這種方式很好,正是我需要的,我自己也打算建立一個,命名為 plink。
plink 的實現思路
實際上,要讓本地端自訂協議正常運作,需要分成幾個步驟:
-
註冊協定:讓 Windows 認識
plink://這個協議。 -
指定程式處理:Windows 需要知道點擊這個協議時,用哪個程式打開。
-
生成 plink 連結:將本地檔案路徑轉換成 plink 格式。
生成 plink 的程式示例
這個程式把剪貼簿中的檔案路徑轉換成 plink:// 連結:
import pyperclip
import urllib.parse
def convert_path_to_plink():
# 取得剪貼簿中的內容
clipboard_content = pyperclip.paste()
# 去除前後雙引號
clipboard_content = clipboard_content.strip('"')
# 將空白轉換為 %20
clipboard_content = clipboard_content.replace(' ', '%20')
# 將反斜線 \ 轉換為 /
clipboard_content = clipboard_content.replace('\\', '/')
# 添加 plink:// 前綴
plink_url = "plink://" + clipboard_content
# 複製轉換後的結果回剪貼簿
pyperclip.copy(plink_url)
print(f"轉換後的 plink 網址:{plink_url}")
# 呼叫轉換函數
convert_path_to_plink()
這樣,你就可以把任何本地檔案路徑轉成 plink 連結,方便在筆記或文件中使用。
plink 連結的解析與開啟
接下來需要一個程式負責解析 plink 並開啟對應的檔案或資料夾,例如 plink_protocol.py:
import os
import sys
import urllib.parse
def open_path_from_plink(url):
# 移除 plink:// 協議前綴
if url.startswith("plink://"):
url = url[len("plink://"):]
# 解碼 URL 中的編碼字符(如 %20)
path = urllib.parse.unquote(url)
# 提取磁碟機代號,例如 C:
drive_letter = path.split('/')[0] # 假設磁碟機代號和路徑分隔符是 /
path_rest = path[len(drive_letter):] # 取得剩餘部分
# 構建完整的 Windows 路徑
full_path = drive_letter + ":" + path_rest.replace('/', '\\')
# 修正可能出現的 '::' 問題
full_path = full_path.replace('::', ':')
# 移除路徑兩端的雙引號(如果有)
if full_path.startswith('"') and full_path.endswith('"'):
full_path = full_path[1:-1]
print(f"Opening path: {full_path}")
# 檢查路徑是否存在
if os.path.exists(full_path):
if os.path.isdir(full_path):
os.startfile(full_path)
elif os.path.isfile(full_path):
os.startfile(full_path)
else:
print(f"無法識別的路徑類型:{full_path}")
else:
print(f"路徑不存在:{full_path}")
# 主程式
if __name__ == "__main__":
if len(sys.argv) > 1:
open_path_from_plink(sys.argv[1])
else:
print("未提供任何路徑。")
這樣,當使用者點擊 plink 連結時,程式會解析路徑並自動打開對應的檔案或資料夾。
註冊 plink 協定
最後,需要在 Windows 註冊表中註冊 plink:// 協定,指向你的 Python 程式:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\plink]
@="URL:Plink Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\plink\shell]
[HKEY_CLASSES_ROOT\plink\shell\open]
[HKEY_CLASSES_ROOT\plink\shell\open\command]
@="\"C:\\Users\\bill\\AppData\\Local\\Programs\\Python\\Python312\\python.exe\" \"D:\\plink_protocol.py\" \"%1\""
這樣設定完成後:
-
點擊
plink://開頭的連結,Windows 會自動呼叫plink_protocol.py。 -
程式會解析連結,找到對應的檔案或資料夾並打開。
-
完全不需要上傳到雲端,也能在本地筆記軟體中使用。
