我最有趣的尝试在一行代码中替换Windows注册表项的子字符串
[HKEY_CLASSES_ROOT\PING\shell\open\command]
@="C:\\Windows\\System32\\ping.exe %1 -t"
场景和背景:
上下文是一个自定义url协议,它将打开一个shell,并持续ping到特定的ip,我想从uri中删除ping://
作为%1
传递的协议。
确定我可以使用批处理文件,但我更愿意将它全部放在注册表中的一行
我尝试了什么:
到目前为止,我尝试添加一个命令列表,&
设置一个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.
我注意到ar
来自%var%
之后%v
使用%var
而不是{{1}}
答案 0 :(得分:5)
得到它.. %v
实际上是
%v – For verbs that are none implies all. If there is no parameter passed this is the working directory.
从this answer获得了
工作代码
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 myvar=%1 & call set myvar=%%myvar:ping:=%% & call set myvar=%%myvar:/=%% & call ping.exe %%myvar%% -t"
答案 1 :(得分:1)
字符串替换仅适用于不具有%1
等参数的变量。
这样的事情可能是一个起点
set "var=%1" & call var=%%var:ping://=%%
在注册表中它可能看起来像
...
[HKEY_CLASSES_ROOT\PING\shell\open\command]
@="cmd /k ( set \"var=%1\" & call set var=%%var:ping://=%% & call set var=%%var:/=%% & call ping.exe %%var%% -t)"