将参数传递给自定义URI

时间:2014-10-17 14:31:22

标签: windows batch-file command-line registry uri

我有一个像这样的自定义uri:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Demo]
@="URL:Demo Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\Demo\DefaultIcon]
@="\"D:\\demo.bat\""

[HKEY_CLASSES_ROOT\Demo\shell]

[HKEY_CLASSES_ROOT\Demo\shell\open]

[HKEY_CLASSES_ROOT\Demo\shell\open\command]
@="\"D:\\demo.bat\" \"%1\" \"%2\" \"%3\" \"%4\""

为了从命令提示符运行它,我使用以下命令:

D:\demo.bat -ping -ip 172.18.102.65

但是为了从浏览器运行相同的,如果我使用自定义URI作为Demo:,那么它要求我传递参数。如果我从浏览器运行参数,我不知道如何将参数传递给自定义URI。

如何在浏览器中运行此自定义uri时传递参数?请指教。

2 个答案:

答案 0 :(得分:5)

并不是说我想重新打开这么老的问题,但我整个上午都在寻找一个更好的答案而没有运气。 OP很幸运,因为他有一个可修改的批处理文件。但是,我想在现有程序(putty)中添加URI,而无需安装其他文件。

我看到它们有两个问题,第一个是完整的URI,包括作为一个参数传递的协议。第二个是无法传递多个参数。

对于协议前缀的第一个解决方案,可以通过执行一些字符串操作来解决它。这样注册表中的命令值如下所示:

cmd /V:ON /C "SET r=%1 & start D:\demo.bat !r:Demo:=!"
  • / V:ON允许!r!替换为执行延迟。
  • / C打开命令窗口,执行指定的命令并关闭命令窗口。
  • SET r =%1保存URI,该值在SET运行时已经存在 已被实际的URI字符串
  • 取代
  • 在这种情况下开始启动程序或批处理文件

现在我们可以操作字符串的第二个解决方案是进行另一个替换,虽然我确信有更好的方法可以将替换链接在一起,如下所示:

cmd /V:ON /C "SET r=%1 & SET s=!r:Demo:=! & start D:\demo.bat !s:_= !"

这最后一个添加用空格()替换下划线(_),并通过使它们成为空格使它们成为用于调用demo.bat的单独参数。 因此,要运行:

D:\demo.bat -ping -ip 172.18.102.65

您的URI将是:

Demo:-ping_-ip_172.18.102.65

注意: 我建议使用小写协议,但要考虑OP的一致性示例

答案 1 :(得分:3)

使用自定义网址时,整个网址会作为单个参数传递到已注册的应用/脚本。您的应用/脚本需要解析URL以提取其所需内容。例如:

[HKEY_CLASSES_ROOT\Demo\shell\open\command]
@="\"D:\\demo.bat\" \"%1\""

您可以按照您想要的方式格式化网址,只要它是有效的网址并以demo:开头,例如:

D:\demo.bat "demo:ping?ip=172.18.102.65"

D:\demo.bat "demo:ping=172.18.102.65"

D:\demo.bat "demo:ping%20172.18.102.65"

更新:但是,请注意,这仅适用于Internet Explorer(以及Windows资源管理器和Windows Shell)。您需要其他浏览器的其他解决方案。例如,Firefox有自己的协议处理程序机制:

Web-based protocol handlers

Adding a New Protocol to Mozilla

Writing a Firefox Protocol Handler