CMD / Batch / Registry - 字符串替换不按预期工作?

时间:2014-04-28 07:25:31

标签: windows shell batch-file cmd registry

我最有趣的尝试在一行代码中替换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}}

2 个答案:

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