2014-04-28 10 views
5

Sto avendo la più divertente cercando di sostituire una stringa in una sola riga di codice per un registro di Windows chiaveCMD/Batch/Registry - La sostituzione delle stringhe non funziona come previsto?

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

Scenario e contesto:

Il contesto è un protocollo URL personalizzato che verrà aprire una shell con ping continuo su un IP specifico e voglio rimuovere il protocollo ping:// dall'ira che viene passato come %1. sicuro che avrei potuto utilizzare un file batch, ma preferisco avere tutto in una sola riga nel Registro

Quello che ho provato:

Finora ho provato aggiungendo un elenco di comandi con & la fissazione di un var e poi facendo eco esso ..

provato call set remove=ping://&call set mynewvar=%1:%remove=%&ping.exe %mynewvar% -t

ho provato espandendo le variabili un paio di volte u cantare %%

Fondamentalmente sto ottenendo risultati strani o sostituire non funziona affatto

Non sei sicuro di quello che sto facendo di sbagliato? Digitando questo, ho iniziato a pensare che sto trascurando il fatto suo nella stringa var @="..."

grazie

delle chiavi del Registro del browser

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" 

digitato url ping://8.8.8.8

output prompt cmd Ping request could not find host ping://8.8.8.8/ar. Please check the name and try again.

noto la ar dopo il PI è da %var% sembra proprio utilizzando il %v non %var

risposta

5

Got it ..%v è in realtà

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

avuto da this answer

codice di lavoro

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, ma '% var %' funziona anche sul mio sistema XP, quindi'% v' sembra non essere la causa del problema – jeb

+0

Ho dovuto rimuovere solo 'protocol:', ed eseguire un programma non-cmd, quindi sono andato con qualcosa del tipo: '" cmd/k set myvar =% 1 e call set myvar = %% myvar: protocol: = %% & chiama \ "C: \\ Programmi \\ percorso \\ a \\ program.exe \" \ "%% myvar %% \" & exit "' – Piyin

1

String sostituire è possibile solo con le variabili non con parametri come %1.

Qualcosa di simile potrebbe essere un punto di partenza

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

Nel Registro di sistema potrebbe sembrare

... 
[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

ho ottenuto che per l'esecuzione in un file batch usando 'cmd/k "set var = % 1 & call set var = %% var: ping: // = %% & ping.exe% var% -t "' ma non fortunato con la chiave di registro .. – StrikeForceZero

+0

@StrikeForceZero Dovresti mostrare il codice completo, hai usato a ge t la chiave di registro e come si tenta di modificarla – jeb

+0

L'ho aggiunta alla domanda – StrikeForceZero