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)"
Другие вопросы по тегам