CMD / Batch / Registry - замена строки не работает должным образом?
У меня есть самое забавное, пытаясь заменить подстроку в одной строке кода для раздела реестра Windows
[HKEY_CLASSES_ROOT\PING\shell\open\command]
@="C:\\Windows\\System32\\ping.exe %1 -t"
Сценарий и контекст:
Контекст - это собственный протокол URL, который открывает оболочку с непрерывным пингом для определенного IP-адреса, и я хочу удалить протокол ping://
от URI, который передается как %1
, конечно, я мог бы использовать командный файл, но я бы предпочел, чтобы все это было в одной строке реестра
Что я пробовал:
до сих пор я пытался добавить список команд с &
установить переменную, а затем повторить его..
пытался 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"
браузер набрал в URLping://8.8.8.8
вывод подсказки cmdPing request could not find host ping://8.8.8.8/ar. Please check the name and try again.
Я замечаю ar
после того, как IP от %var%
кажется, его использование %v
не %var
2 ответа
Понял.. %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)"