You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从PowerShell脚本向Python脚本传递右键菜单参数问题排查

解决右键菜单向Python脚本传递拆分参数的问题

问题根源

右键菜单中的%1代表选中文件的完整路径(例如C:\Docs\test.zip),它本身是一个独立参数。你的Python脚本期望接收「文件路径」和「文件名」两个参数,但当前命令仅传递了这一个完整路径参数,所以sys.argv只会得到一个元素,并非参数传递异常。

两种解决方案

方案1:修改Python脚本(推荐,无需改动右键菜单)

直接在Python脚本中拆分完整路径,无需额外修改注册表命令。使用os.path.split()方法拆分路径和文件名:

import sys
import os

if len(sys.argv) >= 2:
    full_path = sys.argv[1]
    file_dir, file_name = os.path.split(full_path)
    # 后续使用 file_dir 和 file_name 即可
    print(f"路径: {file_dir}, 文件名: {file_name}")
else:
    print("未传入文件参数")

方案2:修改PowerShell注册表命令(在命令行拆分参数)

如果必须通过命令行传递两个参数,可以修改Set-ItemProperty中的命令值,利用CMD的变量扩展语法拆分%1为路径和文件名:

# 假设 $scriptPython 是你的Python脚本路径,例如 "C:\Scripts\your_script.py"
Set-ItemProperty -Path $commandKey -Name '(default)' -Value 'cmd /C "for %%F in ("%1") do "C:\Program Files\IronPython 2.7\ipy.exe" "$scriptPython" "%%~dpF" "%%~nxF""'
  • %%~dpF:提取文件的目录路径(包含末尾反斜杠,例如C:\Docs\)
  • %%~nxF:提取文件名+扩展名(例如test.zip)
    此时你的Python脚本可以直接通过sys.argv[1]拿到路径,sys.argv[2]拿到文件名。

注意事项

  • 若$scriptPython路径包含空格,确保在命令中用双引号包裹(如示例所示)
  • 测试右键菜单前,建议先在CMD中手动执行命令验证参数传递是否正确

内容的提问来源于stack exchange,提问作者JPcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:55:09