CMD /批/registry – stringreplace不按预期工作?

我试着用一个Windowsregistry项的一行代码replace一个子string的乐趣最大

[HKEY_CLASSES_ROOT\PING\shell\open\command] @="C:\\Windows\\System32\\ping.exe %1 -t" 

情景和背景:

上下文是一个自定义的url协议,将打开一个连续ping到一个特定的IP的shell,我想从通过%1传递的uri中删除协议ping:// 。 当然我可以使用一个batch file,但我更喜欢把它全部在registry中的一行

我试过了:

到目前为止,我已经尝试追加一个命令列表&设置一个变种,然后回显它。

尝试call set remove=ping:// & call set mynewvar=%1:%remove=% & ping.exe %mynewvar% -t

我试着用%%扩展variables

基本上我得到奇怪的结果或取代不工作

不知道我做错了什么? 键入这个,我开始认为我忽略了它的stringvar @="..."

谢谢

registry项

 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" 

浏览器inputurl 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. Ping request could not find host ping://8.8.8.8/ar. Please check the name and try again.

我注意到后的IP是从%var%出现它使用%v不是%var

明白了.. %v实际上是

%v – For verbs that are none implies all. If there is no parameter passed this is the working directory.

从这个答案得到了

工作代码

 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这样的参数的变量。

像这样的东西可能是一个起点

 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)"