我试着用一个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)"