1.需求
PC端主要使用Obsidian做笔记的归档,但是偶尔会存在笔记本手写笔记的情况,此时对知识的管理的分离的
需求1
通过定时拍照的方式,快速上传到PC端
需求2
尽可能快速的把上传图片复制到obsidian当中
2.实现
需求1的实现--LocalSend
同一个局域网就能实现文件的转发,手机端可以直接分享到电脑
优点
- PC端可以在后台自动启动
- 双端的操作比较简单,手机端直接通过分享功能就能选择图片进行上传
需求2的实现--Quicker
背景
没有简单的方式可以把文件复制到剪切版当中,设计到window底层的API,尝试过ai写python,go,shell,都不能直接满足需求.然后查看Quicker的动作,发现有相关的基础动作
传入参数: 文件的绝对路径
获得增量文件
简单的python就能实现,文件的记录状态使用json文件进行保存即可
import os
import json
# JSON文件路径,用于存储文件信息和状态
json_file_path = 'file_status.json'
# 文件夹路径,请替换为您自己的文件夹路径
folder_path = r'F:\img\img-back'
def load_data():
"""加载JSON数据"""
if os.path.exists(json_file_path):
with open(json_file_path, 'r', encoding='utf-8') as file:
return json.load(file)
else:
return {}
def save_data(data):
"""保存数据到JSON文件"""
with open(json_file_path, 'w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
def scan_folder_and_update_db(folder_path):
"""扫描文件夹并更新数据库"""
data = load_data()
for root, dirs, files in os.walk(folder_path):
for name in files:
abs_path = os.path.abspath(os.path.join(root, name))
if abs_path not in data:
# 新文件,设置初始状态为1(等待输出)
data[abs_path] = 1
save_data(data)
def get_files_to_output():
"""获取状态为1的文件列表"""
data = load_data()
return [file for file, status in data.items() if status == 1]
def mark_as_output(file_list):
"""将文件标记为已输出(状态2)"""
data = load_data()
for file in file_list:
if file in data and data[file] == 1: # 确保只标记等待输出的文件
data[file] = 2
save_data(data)
# 执行逻辑
if __name__ == '__main__':
# 首次使用或需要更新文件列表时取消下一行的注释
scan_folder_and_update_db(folder_path)
# 获取并打印待输出的文件列表
files_to_output = get_files_to_output()
# 按照行分割,打印文件列表
# output_string = '\n'.join(files_to_output)
# 现在 output_string 就是一个字符串,其中每个文件路径后都有一个换行符
# print(output_string)
for file in files_to_output:
print(file)
# 如果需要在输出后标记这些文件,取消下面两行的注释
mark_as_output(files_to_output)
踩坑1
这时候,兴高采烈的通过quicker的变量进行传值,然后出现识别不了路径的情况 为什么呢
文件放入剪贴板 - Quicker 最开始怀疑字符集问题,对控制台的输出捕获和变量的字符集不同,导致识别失败
结果在不断尝试下,因为控制台输出捕获的字符最后会有一个换行,导致无法正常识别 需要使用API进行处理
$={toReadFileList}.TrimEnd()
踩坑2
这个耗时比较少,中文字符在路径无法正常显示也会导致能够成功复制到剪切板,但是无法复制到Markdown当中,只需要把文件目录就该即可