将参数传递给自定义URI
我有一个自定义的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时传递参数?请指教。
当使用自定义URL时,整个 URL作为单个参数传递到已注册的应用程序/脚本。您的应用/脚本需要解析URL以提取所需内容。例如:
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"
更新:
[HKEY_CLASSES_ROOT\Demo\shell\open\command]
@="\"D:\\demo.bat\" \"%1\""
可以,只要它是一个有效的网址,并用demo:
开始,例如格式化网址,任何你想要的方式,但是请注意,这只适用于Internet Explorer(和Windows资源管理器,以及Windows Shell)。您需要其他浏览器的另一个解决方案。例如,Firefox拥有自己的协议处理机制:
这并不是说我要重新打开这样一个老问题,但我一直在寻找一个更好的答案,这整个上午都没有运气。 OP很幸运,因为他有一个可修改的批处理文件。但是,我想将URI添加到现有程序(putty)而无需安装其他文件。
当我看到它们时,有两个问题,第一个是完整的URI,包括作为一个参数传递的协议。第二个是不能传递多个参数。
对于协议前缀的第一个解决方案,可以通过执行一些字符串操作来解决。这样,在注册表中的指令值的样子:
cmd /V:ON /C "SET r=%1 & start D:\demo.bat !r:Demo:=!"
- /V:ON允许用于R!更换将延迟执行。
- /C打开和关闭命令窗口。
- 集合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的榜样去为一致性
这是一个很好的答案。将参数传递给您无法控制的应用程序是一种有趣的情况,也可能是常见的情况。 – Farax 2017-12-06 03:14:49
谢谢你的信息但不幸的是它不工作。当我在浏览器中运行这个URL'demo:ping?ip = 172.18.102.65'时,它不起作用。即使我在命令提示符下运行:'D:\ demo.bat“演示:ping?ip = 172.18.102.65”',它不起作用。请咨询 – user182944 2014-10-17 15:04:32
定义“不起作用”。你使用的是什么浏览器? demo.bat实际收到什么参数?您是否尝试过其他网址格式?创建注册表值后,您是否重新启动机器? – 2014-10-17 15:44:47
demo.bat接收三个参数:'-ping','-ip'和'172.18.102.65'。我试图让它在FIREfox浏览器中工作,但它不起作用。我尝试用'%20'编码'space',但徒劳无益。我多次重新启动系统,但没用。请让我知道如何使它在FIrefox中工作。 – user182944 2014-10-18 15:15:13