在选定文件上运行Python脚本
我想写一个Python脚本,可以上传我在Windows资源管理器中选择的任何文件。我的想法是,在Windows资源管理器中选择一个文件,右键点击显示文件的上下文菜单,然后从中选择一个命令……类似于“上传到网页服务器”。
在选择这个命令后,Python就会运行一个脚本,接收要上传的文件路径和文件名。写一个可以上传文件到网页的Python脚本看起来很简单。但是不清楚的是,如何在Windows的上下文菜单中创建一个选项来运行这个Python脚本,以及如何把文件路径和文件名传递给这个Python脚本……请给点建议!
7 个回答
如果你想把像Python脚本这样的东西添加到右键菜单里,你可以通过添加注册表键(regedit,注意,编辑注册表时一定要小心!)来实现。
\HKEY_CLASSES_ROOT\Directory\Background\shell
在这里,你可以添加一个容器,并给它起个名字,这个名字就是你希望在右键菜单中显示的内容。在这个容器里,添加一个类型为REG_SZ的键,这个键里可以放入Python脚本的启动命令。
C:\Python27\python.exe "C:\path\to\your\script\yourscript.py"
我不太清楚如何用之前提到的方法来处理多个文件选择并将它们放入sys.argv,但我觉得这也值得在这里提一下。
不要用%1
,用%*
来代替。
%1
只会传入第一个参数,而%*
会传入所有的参数(%n
则是传入第n个参数...)
@echo off
cls
python C:\Your\File\uploadscript.py %*
请注意,命令行有内置的字符限制,在XP及之前的版本中限制为2047个字符,在Windows 7及之后的版本中限制为8191个字符。
假设你在使用Windows 7,如果你打开一个文件夹,然后在地址栏输入“shell:sendto”,按下回车键,你会进入一个上下文菜单。在这里,你可以添加一个包含以下内容的.cmd文件。
@echo off
cls
python C:\Your\File\uploadscript.py %1
这个.cmd文件会执行你的Python脚本,并把文件(%1)作为参数传递给它。在你的Python脚本中,你可以使用:
import sys
sys.argv #sys.argv[1] is the file to upload
这段代码会获取所有传入的参数,所以sys.argv[1]
会得到你传入的文件。我测试过,这个方法是有效的。你需要用.cmd文件而不是直接用.py文件的原因是,.py文件不会出现在“发送到”菜单中。
关于如何获取传入文件的更多信息可以在这里找到:
在Python中接受文件参数(来自“发送到”上下文菜单)
编辑:添加了一个可以处理多个文件的脚本。注意,这个脚本会对每个单独的文件调用Python脚本。如果你想把所有文件作为参数传递给Python脚本,那就需要做更多的工作。如果你想做更复杂的事情,你需要研究一下批处理脚本。
@echo off
cls
:upload_loop
IF "%1"=="" GOTO completed
python C:\Your\File\uploadscript.py %1
SHIFT
GOTO upload_loop
:completed