开发者

Use selected explorer file or folder path as a variable in a python script for a contextual menu

I'm writing a python script that takes a file one at a time or recursively through folders and moves them to a new location. The script takes one parameter (开发者_运维百科the current path of the file). I want to be able to use the selected item in an explorer window as the variable.

I am making a contextual menu through the regedit files that is labeled "Send to Server". I currently have the appropriate regedit files created and pointed to the location of the command python.exe "path\to\python\file.py

long story short, I want a contextual menu to pop up that says "Send to Server" when a file is right clicked and when executed uses the selected file's or folder's path as the only variable I need. So far I have come across tkFileDialog (not quite what I want) ctypes and win32 modules but I can't quite figure out the last three modules or whether or not they will help

As a side note. I have created a python script that does this exact thing on mac osx. Much easier with macs 'services' feature.


If you put a shortcut to this script (written for Python 3) in the user's "SendTo" folder (%USERPROFILE%\SendTo), it will pop up a directory dialog when selected from the right-click SendTo menu. The dialog works for network locations as well. When the script runs, the full path to the selected file/folder is in sys.argv[1]. Currently it just shows the selected destination path in a message box. You can change the extension to pyw if you don't want a console.

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)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜