如何从Windows右键菜单的自定义程序中获取选中文件路径
解决右键菜单传递选中文件路径的问题
核心问题在于你没给右键菜单的命令添加参数传递,Windows会通过特定占位符把选中文件的路径传给你的exe,具体操作如下:
1. 修改注册表命令值
找到你之前添加的注册表项(一般在HKEY_CLASSES_ROOT\*\shell\你的自定义菜单名\command下),把默认值从单纯的exe路径改成:
"C:\绝对路径\你的程序.exe" "%*"
- 双引号必须加:如果exe路径或文件路径有空格,双引号能避免解析错误
%*代表所有选中的文件路径,会作为命令行参数传给你的exe;如果只需要单个文件,可以用%1
2. 在你的exe中接收参数
你的程序需要读取命令行传入的参数,举两个常见语言的例子:
- Python:用
sys.argv获取,sys.argv[1:]就是所有选中文件的路径列表 - C#:用
Environment.GetCommandLineArgs(),数组从索引1开始是文件路径
拿到路径后,就可以编写复制逻辑:遍历每个文件,检查目标文件夹是否存在同名文件,存在则给原文件重命名(比如加_1、_2后缀,直到找到不重复的名称),再执行复制。
注意事项
- 如果是针对文件夹背景的右键菜单(不是选中文件),注册表位置是
HKEY_CLASSES_ROOT\Directory\Background\shell,但你需要的是选中文件的场景,用前面的位置即可 - 测试时可以先写个简单程序,把接收到的参数弹窗显示,确认路径能正确传递再写复制逻辑
内容的提问来源于stack exchange,提问作者Vinanth S Bharadwaj
相关产品推荐
相关产品推荐

