【发布时间】:2014-04-28 07:25:30
【问题描述】:
尝试在一行代码中为 Windows 注册表项替换子字符串是最有趣的
[HKEY_CLASSES_ROOT\PING\shell\open\command]
@="C:\\Windows\\System32\\ping.exe %1 -t"
场景和背景:
上下文是一个自定义 url 协议,它将打开一个 shell 并持续 ping 到特定的 ip,我想从作为 %1 传递的 uri 中删除协议 ping://。
当然我可以使用一个批处理文件,但我更希望将它全部放在注册表中的一行中
我的尝试:
到目前为止,我已经尝试使用 & 设置一个 var 然后回显它来附加一个命令列表。
试过call set remove=ping://&call set mynewvar=%1:%remove=%&ping.exe %mynewvar% -t
我尝试使用 %% 扩展变量几次
基本上我得到了奇怪的结果,或者替换根本不起作用
不确定我做错了什么?输入这个,我开始认为我忽略了它在字符串中的事实 var @="..."
谢谢
注册表项
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\PING]
@="url:ping protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\PING\shell]
[HKEY_CLASSES_ROOT\PING\shell\open]
[HKEY_CLASSES_ROOT\PING\shell\open\command]
@="cmd /k set var=%1 & call set var=%%var:ping://=%% & ping.exe %var% -t"
浏览器输入网址
ping://8.8.8.8
cmd提示符输出
Ping request could not find host ping://8.8.8.8/ar. Please check the name and try again.
在 ip 来自 %var% 之后,我注意到 ar 它似乎使用 %v 而不是 %var
【问题讨论】:
标签: windows shell batch-file cmd registry