Gibt es ein Escapezeichen für das Zeichen '&' in der Eingabeaufforderung?

11

Ich versuche so etwas wie:

set pwd = abc&123
echo password %pwd%

Ich bekomme das Ergebnis als ...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc

Ist das System so oder gibt es eine Flucht für solche Charaktere?

deostroll
quelle
1
Dieselbe
Michael Freidgeim

Antworten:

9

Was Sie tun müssen, ist, Ihr Passwort in doppelte Anführungszeichen zu setzen:

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

Lass mich wissen, wie es geht.

Carlos
quelle
1
Eine andere Option, die in einigen Szenarien vorzuziehen sein kann, istset "pwd=abc&123"
Harry Johnston
1
-1 Es ist schockierend, dass dies 5 positive Stimmen hatte, es ist falsch. Windows verwendet% var% oder! Var! du hättest es so einfach selbst testen können. $ var ist unter Linux, wenn Sie $ var in Windows wiedergeben, heißt es nur wörtlich $ var
barlop
1
@barlop: Da es die andere Zeile ist, die die Frage anspricht, sehe ich nicht, dass es darauf ankommt.
Harry Johnston
7

Ich fand, dass es am besten mit einer Kombination aus Martineaus Antwort und Mastashake57s Antwort funktioniert.

set pwd=abc^&123
echo %pwd%

Scheitert immer noch und

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

Fügt Anführungszeichen hinzu (Sie können die Anführungszeichen nicht mit einer forSchleifen- oder Zeichenfolgenmanipulation entfernen, da sie dank des kaufmännischen Und wieder fehlschlagen), was nicht so toll ist.

Jedoch,

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

Funktioniert perfekt.

Ich hoffe, das hilft.

BDM
quelle
+1. Beachten Sie, dass dadurch das Karat in der Umgebungsvariablen verbleibt, dh pwdauf gesetzt wird abc^&123. Meistens ist dies wahrscheinlich genau das, was Sie tun müssen, aber es könnte Sie auffangen, wenn Sie nicht wissen, was passiert.
Harry Johnston
@ HarryJohnston Ich muss Ihren Rechtschreibfehler korrigieren. Es ist wichtig. Übrigens weiß ich, dass ntcmds.chm es erwähnt, aber wo in cmd /? Dokumentation wird erwähnt, dass das Caret der Fluchtcharakter ist?
Barlop
@Barlop: so ist es; Ich habe es mit dem Homonym verwechselt. In der Regel wird /?nur eine Zusammenfassung und keine umfassende Dokumentation bereitgestellt.
Harry Johnston
@barlop ,? Das Caret ist der Fluchtcharakter.
Pacerier
@ Pacerier ja, Caret ist der Fluchtcharakter, niemand ist damit einverstanden. und es wird erwähnt, dass es sich um das Escape-Zeichen in ntcmds.chm handelt (ntcmds.chm wurde mit XP geliefert und befindet sich in einem äquivalenten Online-Format unter microsoft.com/resources/documentation/windows/xp/all/proddocs/… und möglicherweise in gewisser Weise online aktueller - vielleicht mehr Befehle). Ich habe nur gefragt, wo in /? (wenn überhaupt), heißt es, dass Caret der
Fluchtcharakter
7

Aus der Befehlszeilenreferenz-Hilfedatei:

Das kaufmännische Und (&), die Pipe (|) und die Klammern () sind Sonderzeichen, denen das Escape-Zeichen (^) oder Anführungszeichen vorangestellt werden müssen, wenn Sie sie als Argumente übergeben.

Es scheint, als wäre es einfacher, das gesamte Passwort in Anführungszeichen zu setzen, als einzelne Zeichen zu maskieren, wenn mehr als zwei Zeichen darin enthalten sind, die behandelt werden müssen.

Martineau
quelle
Und Zitate in Anführungszeichen?
Pacerier
4

Was Sie wirklich brauchen, ist:

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

Oder:

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

Erläuterung:

Da &es sich um ein spezielles Zeichen handelt, müssen Sie es mit entkommen ^, was zu ^&.

Beim Ausführen set pwd=abc^&123wird die Variable auf den Wert gesetzt abc&123. Wenn Sie danach laufen echo %pwd%, laufen Sie effektiv echo abc&123.

Funktioniert echo abc&123aber nicht wie erwartet, da &es sich um einen speziellen Charakter handelt. Sie können dies vermeiden, indem Sie Anführungszeichen hinzufügen. echo "abc&123"Ihre Ausgabe enthält jedoch auch die Anführungszeichen. Mit anderen Worten, die Verwendung von Anführungszeichen ist nicht gerade die richtige Lösung.

Was Sie brauchen, ist, dem &Zeichen zu entkommen, wenn Sie den echoBefehl ausführen :

echo abc^&123

Die Variable muss also den Wert enthalten abc^&123. Um die Variable auf den Wert zu setzen abc^&123, müssten Sie die Sonderzeichen maskieren ^und Folgendes führen &:

set pwd=abc^^^&123
Pacerier
quelle
+1 für den Hinweis auf die Notwendigkeit, dem Caret zu entkommen
jmcg
Funktioniert super, danke. Dieses Escape-Zeichen wird im Dokument aus irgendeinem Grund nicht erwähnt. Docs.microsoft.com/en-us/windows-server/administration/…
Sergey Smolnikov