我有一个像这样的自定义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时传递参数?请指教。
答案 0 :(得分:5)
并不是说我想重新打开这么老的问题,但我整个上午都在寻找一个更好的答案而没有运气。 OP很幸运,因为他有一个可修改的批处理文件。但是,我想在现有程序(putty)中添加URI,而无需安装其他文件。
我看到它们有两个问题,第一个是完整的URI,包括作为一个参数传递的协议。第二个是无法传递多个参数。
对于协议前缀的第一个解决方案,可以通过执行一些字符串操作来解决它。这样注册表中的命令值如下所示:
cmd /V:ON /C "SET r=%1 & start D:\demo.bat !r:Demo:=!"
现在我们可以操作字符串的第二个解决方案是进行另一个替换,虽然我确信有更好的方法可以将替换链接在一起,如下所示:
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有自己的协议处理程序机制: