2014-04-28 40 views
5

mam najbardziej zabawne próbując zastąpić podciąg w jednej linii kodu do klucza rejestru systemu WindowsCMD/Batch/Registry - String replace nie działa zgodnie z oczekiwaniami?

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

Scenariusz i kontekst:

Kontekst jest zwyczaj, że będzie protokół url Otwórz powłokę z ciągłym pingem do konkretnego ip i chcę usunąć protokół ping:// z URI, który zostanie przekazany jako %1. pewien, że mogę korzystać z pliku wsadowego, ale wolałbym mieć wszystko w jednej linii w rejestrze

Co próbowałem:

dotychczas Próbowałem dołączając listę polecenia z & ustawienie var a następnie powtarzając go ..

próbowali call set remove=ping://&call set mynewvar=%1:%remove=%&ping.exe %mynewvar% -t

próbowałem rozszerzanie zmiennych kilka razy ù śpiewać %%

zasadzie byłem coraz dziwne rezultaty lub wymienić nie działa w ogóle

Nie wiem, co robię źle? Wpisanie tego, zacząłem myśleć, że jestem z widokiem na fakt jej w ciąg var @="..."

dzięki

klucza rejestru

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" 

przeglądarka wpisany URL ping://8.8.8.8

Wyjście polecenia cmd Ping request could not find host ping://8.8.8.8/ar. Please check the name and try again.

zauważam ar po ip jest od %var% wydaje jej pomocą %v nie %var

Odpowiedz

5

Got to ..%v jest rzeczywiście

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

że dostał od this answer

kod roboczych

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" 
+0

Nice, ale '% var%' również działa na moim systemie XP, więc '% v' nie wydaje się być przyczyną problemu – jeb

+0

Musiałem usunąć tylko 'protokół:' i uruchomić program inny niż cmd, więc poszedłem z czymś takim: '" zestaw cmd/k myvar =% 1 i zestaw wywołający myvar = %% myvar: protocol: = %% & call \ "C: \\ Program Files \\ ścieżka \\ do \\ program.exe \" \ "%% myvar %% \" & exit "' – Piyin

1

String zastąpić możliwe jest tylko przy zmiennych nie o parametrach takich jak %1.

Coś takiego może być punktem wyjścia

set "var=%1" & call var=%%var:ping://=%% 

W rejestrze może to wyglądać

... 
[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)" 
+0

stałam się go uruchomić w pliku wsadowym przy użyciu 'cmd/k„set var = % 1 i zestaw wywołający var = %% var: ping: // = %% & ping.exe% var% -t "', ale nie ma szczęścia z kluczem rejestru. – StrikeForceZero

+0

@StrikeForceZero Powinieneś pokazać pełny kod, którego użyłeś do ge t klucz rejestru i jak spróbować go zmodyfikować – jeb

+0

Dodałem go do pytania – StrikeForceZero