瞎折腾之博客流程优化

有点不好意思写这么鸡毛蒜皮的折腾,但是不记一下我肯定会忘,所以……

反正我的博客我做主!

一个是关于 Obsidian 和 PicList。

之前 PicList 是设置的开机启动,但我的笔电实在是有点旧每次都得开着任务管理器小心哪个应用太占地,PicList 比 PicGo 更占内存,而我只有开 Obsidian 的时候才会需要用到 PicList 上传,根本没必要开机就启动。如果在 Obsidian 写到一半要上传图片时再开 PicList 又觉得有点麻烦,靠着万能的 AI 写了个 bat 文件,让 PicList 和 Obsidian 联动,这样打开和退出 Obsidian 时 Piclist 也自动启动和关闭。试用两天之后发现 bat 文件运行后会在 taskbar 保留一个窗口很碍眼,而且要是关闭这个文件的话 Obsidian 和 PicList 也会停止。那有没有什么办法彻底让 bat 窗口隐藏呢?问了 AI 给我的答案居然是用 VB 写一个脚本让 bat 程序在后台运行。VB!这什么祖奶奶级别的语言!但是真的很有用!

所以就是先建一个 bat 文件:

@echo off
start /b "Obsidian" "C:\Path\to\Obsidian.exe" 
start /b "PicList" "C:\Path\to\PicList.exe"

:wait_for_obsidian 
tasklist /FI "IMAGENAME eq Obsidian.exe" | findstr /I "Obsidian.exe" >nul 
if errorlevel 1 goto exit_piclist

timeout /t 1 >nul 
goto wait_for_obsidian

:exit_piclist
taskkill /IM PicList.exe /F
exit

再建一个 vbs 文件,比如 run_hidden.vbs

Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run chr(34) & "C:\Path\to\Your\BatchFile.bat" & chr(34), 0, True 
Set WshShell = Nothing

替换相应路径,再为 vb 文件创建一个桌面快捷方式,之后启动这个快捷方式,就可以自动打开 Obsidian 和 Piclist,上面的 bat 脚本在后台运行,之后退出 Obsidian 时 PicList 也会自动关闭。

另一个则是关于我的读书记录。

之前我是从博客同步的书影音 CSV 文件里手动复制,再给标题加 ###和 shortcode 格式,即使每次用上 alt + shift 批量编辑多条信息我也觉得很烦。因为我几乎每个月都要处理这个问题,并且每次都是十几甚至几十条,这种重复劳动也是太烦人。现在的方案是用 Python 要求输入日期,然后读取 CSV 文件内该时间段的 titleidcomment column,再按标记时间增序输出特定格式,如下:

python_output

import pandas as pd

def process_csv():
    # Step 1: Ask for input
    date_input = input("Enter a date (format: yyyymm): ")

    try:
        # Ensure date is valid
        pd.to_datetime(date_input, format="%Y%m")
    except ValueError:
        print("Invalid date format. Please use yyyymm.")
        return

    # Step 2: Read the CSV file
    file_path = "CSV file" #replace with actual csv file path 
    try:
        df = pd.read_csv(file_path)
    except FileNotFoundError:
        print("File not found. Please provide a valid path.")
        return
    except Exception as e:
        print(f"An error occurred while reading the file: {e}")
        return

    # Check if required columns exist
    required_columns = {"star_time", "title", "id", "comment"}
    if not required_columns.issubset(df.columns):
        print(f"The CSV file must contain these columns: {required_columns}")
        return

    # Step 3: Filter rows based on the input date
    df["star_time"] = pd.to_datetime(df["star_time"], errors="coerce")
    filtered_df = df[df["star_time"].dt.strftime("%Y%m") == date_input]

    # Step 4: Sort the results by date (ascending)
    sorted_df = filtered_df.sort_values(by="star_time", ascending=True)

    # Step 5: Format the output as Markdown
    md_content = ""

    for _, row in sorted_df.iterrows():
         md_content += f"###{row['title']}\n\n"
         md_content += f"{{{/{<douban \"{row['id']}\" >}/}}}\n\n"  
         # 取消反斜杠/
         md_content += f"{row['comment']}\n\n"

    # Step 6: Save the output as an .md file
    output_folder = "your_folder_path"  # Replace "your_folder_path" with the actual path to your folder
    output_file = f"{output_folder}/{date_input}.md"

    try:
        with open(output_file, "w", encoding="utf-8") as f:
            f.write(md_content)
        print(f"Markdown file saved as '{output_file}'.")
    except Exception as e:
        print(f"An error occurred while writing the Markdown file: {e}")

# Run the script
process_csv()

Comments