如何从命令行获取Microsoft Office程序当前打开的编辑文件的绝对路径
你之前通过Win32_Process的CommandLine属性拿不到Office文档路径的原因是:Office进程的命令行仅在通过双击文件直接拉起程序时才会携带文档路径;如果是先启动Word/Excel主程序再打开文档、或是在程序内新建/编辑文档,命令行不会记录文档路径,因此该方法对Office场景不生效。
以下是两种可落地的解决方案:
方案1:调用Office COM接口(最稳定,仅适用于Office系列程序)
首先安装依赖:
pip install pywin32
获取Word打开的文档路径示例
import win32com.client # 连接到当前运行的Word实例 word = win32com.client.GetActiveObject("Word.Application") # 遍历所有打开的文档 for doc in word.Documents: print(f"文档名:{doc.Name},绝对路径:{doc.FullName}")
获取Excel打开的文档路径示例
import win32com.client excel = win32com.client.GetActiveObject("Excel.Application") for wb in excel.Workbooks: print(f"工作簿名:{wb.Name},绝对路径:{wb.FullName}")
说明:
- 该方法可100%拿到准确的编辑中文件路径,兼容所有主流Office版本
- 如果同时运行了多个Office实例,可通过win32com的GetObject方法逐个匹配进程PID关联
- 使用结束后建议手动释放COM对象避免残留后台进程:
del word(不需要关闭Office就仅删除对象即可,不要调用Quit()方法,会直接关闭正在运行的Office程序)
方案2:遍历进程打开的文件句柄(通用方案,适用于所有程序)
依赖安装:
pip install psutil
示例代码:
import psutil PID = 4464 # 替换为你的Office进程PID p = psutil.Process(PID) # 过滤Office文档后缀,同时排除~$开头的Office临时文件 target_suffix = (".docx", ".doc", ".xlsx", ".xls", ".pptx", ".ppt") for file in p.open_files(): if file.path.endswith(target_suffix) and "\\~$" not in file.path: print(f"打开的文档绝对路径:{file.path}")
说明:
- 该方法为通用方案,不限于Office程序,可获取任意进程打开的文件路径
- 需要以管理员权限运行Python脚本,否则无法读取其他进程的句柄信息
- 存在小概率误判,若进程同时打开了多个同后缀文件需要自行根据业务逻辑筛选
内容的提问来源于stack exchange,提问作者ConciseVerbosity21
相关产品推荐
相关产品推荐

