You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python3.10的tkinter.filedialog获取.lnk文件自身路径?

解决.lnk文件路径获取与跨电脑报错问题

问题根源

Windows下tkinter的askopenfilenames默认调用原生资源管理器对话框,会自动解析.lnk快捷方式,返回其指向的目标文件路径而非快捷方式本身的路径。当把.lnk复制到其他电脑后,目标文件通常不存在,因此触发FileNotFoundError。

解决方案

方案1:禁用快捷方式解析,直接获取.lnk自身路径

给askopenfilenames添加options={'dontuseew': True}参数,强制使用tkinter自带的文件对话框而非Windows原生对话框,就能直接拿到.lnk文件的真实路径:

import tkinter as tk
from tkinter import filedialog
import os
import datetime

root = tk.Tk()
root.withdraw()

# 弹出文件选择框,禁用快捷方式解析
file_paths = filedialog.askopenfilenames(
    title="选择文件",
    filetypes=[("所有文件", "*.*"), ("快捷方式文件", "*.lnk")],
    options={'dontuseew': True}
)

# 遍历处理选中的文件
for path in file_paths:
    # 获取文件自身的生成时间
    gen_time = datetime.datetime.fromtimestamp(os.path.getmtime(path))
    print(f"文件路径:{path},生成时间:{gen_time}")

这种方式无需额外依赖,能直接获取.lnk文件本身的路径,复制到其他电脑也不会因为目标文件不存在报错。

方案2:用pywin32同时处理.lnk自身与目标路径

如果需要同时获取.lnk自身信息和它指向的目标文件,可以借助pywin32库解析快捷方式:

先安装依赖:

pip install pywin32

代码示例:

import tkinter as tk
from tkinter import filedialog
import os
import datetime
import win32com.client

root = tk.Tk()
root.withdraw()

file_paths = filedialog.askopenfilenames(
    title="选择文件",
    filetypes=[("所有文件", "*.*"), ("快捷方式文件", "*.lnk")]
)

shell = win32com.client.Dispatch("WScript.Shell")

for path in file_paths:
    # 先处理文件自身的生成时间
    gen_time = datetime.datetime.fromtimestamp(os.path.getmtime(path))
    print(f"文件路径:{path},生成时间:{gen_time}")
    
    # 如果是快捷方式,可选解析目标路径
    if path.endswith(".lnk"):
        try:
            shortcut = shell.CreateShortCut(path)
            print(f"快捷方式目标路径:{shortcut.Targetpath}")
        except Exception as e:
            print(f"解析快捷方式失败:{str(e)}")

这个方案在跨电脑场景下,依然能正常获取.lnk自身的路径和时间,解析目标路径时若目标不存在会抛出异常,可按需处理。

内容的提问来源于stack exchange,提问作者DaveDT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:09:31