在Python脚本中使用选定文件或文件夹路径作为上下文菜单变量

2 投票
1 回答
2666 浏览
提问于 2025-04-16 22:06

我正在写一个Python脚本,这个脚本可以一次处理一个文件,或者通过文件夹递归处理文件,然后把它们移动到新的位置。这个脚本只需要一个参数,就是文件的当前路径。我希望能在资源管理器窗口中选中的项目作为这个参数。

我正在通过注册表文件创建一个右键菜单,菜单上写着“发送到服务器”。我已经创建了相应的注册表文件,并指向了命令的路径,也就是python.exe "path\to\python\file.py"

简单来说,我想要一个右键菜单,当我右击一个文件时,会弹出“发送到服务器”的选项,执行时只用选中文件或文件夹的路径作为我需要的唯一参数。目前我遇到了tkFileDialog(这不是我想要的),还有ctypes和win32模块,但我还不太明白这三个模块是否能帮上忙。

顺便说一下,我已经在mac osx上创建了一个做同样事情的Python脚本。用mac的“服务”功能要简单得多。

1 个回答

3

如果你把这个脚本(是为Python 3写的)放到用户的“发送到”文件夹里(路径是%USERPROFILE%\SendTo),那么当你在右键菜单中选择“发送到”时,就会弹出一个选择目录的对话框。这个对话框也可以用来选择网络位置。当脚本运行时,选中的文件或文件夹的完整路径会保存在sys.argv[1]里。目前,它只会在一个消息框中显示选定的目标路径。如果你不想看到控制台,可以把文件扩展名改成pyw。

import os, sys
from tkinter import Tk, filedialog
from tkinter.messagebox import showinfo

class Dialog:

    def __init__(self, path):
        self.path = path
        self.dst_path = ''
        self.root = root = Tk()

        root.iconify()
        root.after_idle(self.askdirectory)
        root.mainloop()

    def askdirectory(self):
        self.dst_path = filedialog.askdirectory(initialdir=self.path)
        showinfo('Selected Path', self.dst_path)
        self.root.destroy()

if __name__ == '__main__':
    if len(sys.argv) > 1:
        path = sys.argv[1]
        if os.path.isfile(path):
            path = os.path.dirname(path)

        dialog = Dialog(path)

        #if dialog.dst_path: do_something(dialog.dst_path)

撰写回答