c'è una via d'uscita per il carattere '&' nel prompt dei comandi?


Risposte:


9

Quello che devi fare è racchiudere la tua password tra virgolette doppie in questo modo:

set pwd="abc&123"
echo %pwd%

Fammi sapere come va.


1
Un'altra opzione che può essere preferibile in alcuni scenari èset "pwd=abc&123"
Harry Johnston,

1
-1 è scioccante che questo abbia avuto 5 voti positivi, è sbagliato. Windows utilizza% var% o! Var! avresti potuto testarlo da solo così facilmente. $ var è in linux, se riecheggi $ var in windows, dice letteralmente $ var
barlop

1
@barlop: visto che è l' altra riga a rispondere alla domanda, non vedo che sia importante.
Harry Johnston,

7

Ho scoperto che funziona meglio con una combinazione sia della risposta di martineau che della risposta di mastashake57.

set pwd=abc^&123
echo %pwd%

Ancora fallisce, e

set pwd="abc&123"
echo %pwd%

Aggiunge virgolette (non è possibile rimuovere le virgolette con un forciclo o una manipolazione di stringhe perché fallirà di nuovo, grazie alla e commerciale), il che non è eccezionale.

Però,

set "pwd=abc^&123"
echo %pwd%

Funziona perfettamente.

Spero che aiuti.


+1. Essere consapevoli del fatto che questo lascia il carato nella variabile d'ambiente, ovvero, imposta pwdsu abc^&123. Il più delle volte questo è probabilmente esattamente quello che devi fare, ma potrebbe sorprenderti se non sei consapevole di ciò che sta accadendo.
Harry Johnston

@HarryJohnston Devo correggere il tuo errore di ortografia. È attento. a proposito so che ntcmds.chm lo menziona, ma dove in cmd /? la documentazione è menzionata sul fatto che il cursore è il personaggio di fuga?
barlop

@Barlop: così è; Lo stavo confondendo con l'omonimo. Come regola generale /?fornisce solo un riepilogo, non una documentazione completa.
Harry Johnston

@barlop,? Il guardiano è il personaggio di fuga.
Pacerier,

@Pacerier sì, la custodia è il personaggio di fuga, nessuno è in disaccordo. e si dice che è il carattere di escape, in ntcmds.chm (ntcmds.chm è arrivato con XP ed è in un equivalente online microsoft.com/resources/documentation/windows/xp/all/proddocs/… e forse in qualche modo più aggiornato online - forse più comandi). Stavo solo chiedendo dove in /? (se da
qualche

7

Dal file della guida di riferimento della riga di comando:

La e commerciale (&), pipe (|) e parentesi () sono caratteri speciali che devono essere preceduti dal carattere di escape (^) o dalle virgolette quando li si passa come argomenti.

Sembra che mettere l'intera password tra virgolette sarebbe più facile che sfuggire ai singoli caratteri se ci sono più di due caratteri al suo interno che hanno bisogno del trattamento.


E virgolette tra virgolette?
Pacerier,

4

Ciò di cui hai veramente bisogno è:

set pwd=abc^^^&123
echo %pwd%

O:

set "pwd=abc^&123"
echo %pwd%

Spiegazione:

Dato che &è un carattere speciale, devi scappare con ^, risultando ^&.

In esecuzione set pwd=abc^&123imposterà la variabile sul valore abc&123. Dopodiché, se dovessi correre echo %pwd%, stai effettivamente correndo echo abc&123.

Tuttavia echo abc&123non funziona come previsto, perché &è un personaggio speciale. Puoi evitarlo aggiungendo virgolette: echo "abc&123"ma il tuo output avrebbe anche i caratteri di virgoletta. In altre parole, l'uso delle virgolette non è esattamente una soluzione adeguata.

Ciò di cui hai bisogno è di sfuggire al &carattere quando esegui il echocomando:

echo abc^&123

Quindi la variabile deve contenere il valore abc^&123. Per impostare la variabile sul valore abc^&123, è necessario evitare i caratteri speciali ^e &, di conseguenza:

set pwd=abc^^^&123

+1 per aver sottolineato la necessità di scappare dal
guardiano

Funziona benissimo, grazie. Questo carattere di escape non è menzionato nel documento per qualche motivo docs.microsoft.com/en-us/windows-server/administration/…
Sergey Smolnikov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.