将参数传递给自定义URI

use*_*944 7 windows registry command-line uri batch-file

我有一个这样的自定义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\""
Run Code Online (Sandbox Code Playgroud)

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

D:\demo.bat -ping -ip 172.18.102.65

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

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

Rem*_*eau 6

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

[HKEY_CLASSES_ROOT\Demo\shell\open\command]
@="\"D:\\demo.bat\" \"%1\""
Run Code Online (Sandbox Code Playgroud)

您可以按照您想要的任何方式设置 URL 格式,只要它是有效的 URL 并且以 开头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"
Run Code Online (Sandbox Code Playgroud)

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

基于 Web 的协议处理程序

向 Mozilla 添加新协议

编写 Firefox 协议处理程序


Cut*_*tch 6

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

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

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

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

现在,我们可以处理字符串的第二种解决方案是执行另一个替换,尽管我确信有更好的方法可以将替换链接在一起,如下所示:

cmd /V:ON /C "SET r=%1 & SET s=!r:Demo:=! & start D:\demo.bat !s:_= !"
Run Code Online (Sandbox Code Playgroud)

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

D:\demo.bat -ping -ip 172.18.102.65
Run Code Online (Sandbox Code Playgroud)

您的URI为:

Demo:-ping_-ip_172.18.102.65
Run Code Online (Sandbox Code Playgroud)

注意:我建议使用小写协议,但请参考OP的示例以确保一致性