Sonderzeichen in Batch-Datei
Sonderzeichen in batch Dateien sind ein Schmerz, aber ich habe noch nicht das richtige gefunden Abhilfe für die korrekte Flucht der ersten beiden Zeichen, die in diesem bestimmten string, den ich versuche zu pass-Anwendung.
SET pass=^&AntiBatchfileString
A_Program.exe /pass=%pass%
Dinge, die ich versucht habe:
:: Escaping the escape twice, first for ^, second for &.
SET pass=^^^^&AntiBatchfileString
echo %pass%
:: Combining escapes.
SET first=^^
SET second=^^&AntiBatchfileString
SET pass=%first%%second%
echo %pass%
:: Preventing expansion
SET first=^^
SET second=^^&AntiBatchfileString
SET pass=!first!%second%
echo %pass%
:: I got this to print correctly
SET "pass=^&AntiBatchfileString"
echo ^^%pass%
Immer noch beim passieren der letzten, es nimmt nicht den login, ich weiß nicht, was die Letzte Ausgabe ist. Das hat mir zu denken vielleicht, es wurde versucht zu tun, ein weiterer ausbau bei der übergabe der parameter an die Anwendung, so zitierte ich das auch.
SET "pass=^&AntiBatchfileString"
A_Program.exe "/pass=^^%pass%"
Funktioniert es immer noch nicht, ich bin mir nicht sicher, was mir fehlt an dieser Stelle.
Mögliche Duplikate von Stapel-Zeichen-escaping
InformationsquelleAutor Matthew Rhoden | 2016-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angenommen, Sie möchten den string
^&AntiBatchfileString
buchstäblich, dies ist die besteset
syntax, da die meisten Sonderzeichen (^
&
(
)
<
>
|
und auch die standard-Trennzeichen,
;
=
RAUM TAB) verlieren Sie Ihre Besondere Bedeutung, sobald ther sind platziert zwischen""
, und die""
selbst nicht Teil der variable Wert:Dies funktioniert nur so lange, wie die Befehlserweiterungen sind, das ist die Windows-Standard-sowieso (Typ
cmd /?
und sehen die/E
option).Beim erweitern (Lesen) eine variable wie
"%pass%"
(mit umschließenden""
), Sonderzeichen werden noch immer behandelt, buchstäblich.Jedoch, sobald Sie es erweitern wie
%pass%
(keine""
), bekommen Sie wieder Ihre Besondere Bedeutung. So haben Sie die folgenden Optionen:set "pass=^^^&AntiBatchfileString"
, wo^^
entweicht die wörtliche^
und^&
die wörtliche&
beim Lesen wie%pass%
.set /?
über, wie es funktioniert undsetlocal /?
odercmd /?
darüber, wie um es zu aktivieren), wo der Wert der Variablen erweitert (Lesen) an einem Punkt der Zeit, wo die Parsen von Sonderzeichen ist bereits abgeschlossen.Ich den zweiten Weg bevorzugen, weil keine speziellen Escapezeichen ist notwendig, und es kann sich auch um
"
erscheinen in den string-Wert (auch wenn sich asymmetrisch zueinander beziehen vorhanden).Übrigens
"
können auch maskiert werden, indem^"
, solange dies nicht innerhalb unescaped""
.Trotzdem
%
Zeichen nicht maskiert werden, wie^%
in einer batch-Datei, weil Prozent expansion geschieht, bevor Sie die Flucht, aber Sie müssen doppelklicken Sie wie%%
um eine buchstäbliche jeder, unabhängig davon, ob oder nicht the string wird zwischen""
.Beachten Sie, dass auf der Konsole
%%
funktioniert nicht.Schließlich wörtliche
!
verbraucht werden, die durch die verzögerte Erweiterung-Funktion, wenn aktiviert, deshalb müssen Sie zahlen besonderes Augenmerk auf diejenigen, die in Fall, von Ihnen zu entkommen, wie^!
oder auch durch die intelligente Umschaltung verzögerte Erweiterung (daher aktivieren Sie es nur, wenn es tatsächlich benötigt wird und deaktivieren Sie es andernfalls, wenn eine literal-Zeichenfolge bereitgestellt wird, wie in einemset
Befehl Linie, zum Beispiel, wenn die Erweiterung einer standard-Variablen wie%pass%
und beim Lesen einefor
variable wie%%I
(batch-Datei) oder%I
(Konsole), für Beispiel). Das ist natürlich auch nicht die ultimative Lösung, denn Sie müssensetlocal
undendlocal
aktivieren/deaktivieren Sie die verzögerte Erweiterung, die dazu bestimmt sind, zu lokalisieren Umgebung ändert, so dass jede variable, die Veränderungen seit dem letztensetlocal
Befehl verloren, sobaldendlocal
ausgeführt wird (es gibt einige tricks für die übergabe eines Variablen Wertes über dieendlocal
Barriere)."/pass=%pass%"
beim Versuch den anderen Kram. Es funktioniert nun und danke für die Tipps, @aschipfl!InformationsquelleAutor aschipfl