在Python脚本中使用选定文件或文件夹路径作为上下文菜单变量
我正在写一个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)