使用选定的资源管理器文件或文件夹路径作为上下文菜单的python脚本中的变量

时间:2011-07-22 22:33:04

标签: python windows contextmenu explorer selecteditem

我正在编写一个python脚本,一次一个文件或递归文件夹并将它们移动到一个新位置。该脚本采用一个参数(文件的当前路径)。我希望能够将资源管理器窗口中的所选项目用作变量。

我正在通过标记为“发送到服务器”的regedit文件创建上下文菜单。我目前已经创建了相应的regedit文件,并指向命令python.exe“path \ to \ python \ file.py

的位置

长话短说,我想要一个上下文菜单,当右键单击文件时弹出“发送到服务器”,执行时使用所选文件或文件夹的路径作为我需要的唯一变量。到目前为止,我遇到了tkFileDialog(不是我想要的)ctypes和win32模块,但我无法弄清楚最后三个模块或它们是否会有所帮助

作为旁注。我已经创建了一个python脚本,可以在mac osx上执行此操作。使用macs'服务'功能会更容易。

1 个答案:

答案 0 :(得分:3)

如果在用户的“SendTo”文件夹(%USERPROFILE%\SendTo)中为此脚本(为Python 3编写)放置shortcut,则从右键单击中选择时会弹出一个目录对话框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)