Das ist vielleicht ganz einfach, aber im Internet gab es keine Antworten darauf. Ich möchte eine XML-Zeile per Batch in eine Datei übertragen, aber das XML-Abschluss-Tag für die Umleitung ">" wird falsch verstanden. Die Linie ist wie folgt:
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
Gibt es eine Möglichkeit, dem Batch-Parser einen Hinweis zu geben, eine spezielle Zeichenfolge nicht zu interpretieren? Ich habe doppelte Anführungszeichen verwendet, aber es schreibt sie auch in die Datei! Die Datei sollte nach dem Echo folgendermaßen aussehen:
<?xml version="1.0" encoding="utf-8" ?>
batch-file
escaping
echo
Amir Zadeh
quelle
quelle
Antworten:
Sie können Shell-Metazeichen mit
^
folgenden Elementen entkommen :Beachten Sie, dass
echo
eine integrierte Shell nicht den üblichen Konventionen für das Zitieren entspricht. Wenn Sie also nur das Argument zitieren, werden die Anführungszeichen ausgegeben, anstatt sie zu entfernen.quelle
<
und>
. Da ist nichts Besonderes. Davon abgesehen würde ichecho
aus ... offensichtlichen Gründen davon abraten, große XML-Dateien in einer einzigen Zeile zu speichern.echo
Zeichen:<
,>
,'
,(
und)
. Alle können mit einem Caret abgegrenzt werden^
. Weitere illegale Zeichen hier, aber die meisten davon sind nicht in meinem typischen Anwendungsfall.Um Sonderzeichen wie '>' unter Windows mit Echo zu verwenden, müssen Sie ein spezielles Escape-Zeichen davor platzieren.
Zum Beispiel
funktioniert nicht, da '>' durch '^' maskiert werden muss:
Siehe auch Escape-Sequenzen .
Es gibt eine kurze Batch-Datei, die einen grundlegenden Satz von Sonderzeichen und deren Escape-Sequenzen druckt.
quelle
echo Line1"" & echo line2
vsecho Line1^" & echo line2
eine andere Methode:
quelle
if defined $ echo(%%_
sollte erweitert werden,if defined $ echo(%%_ >> myxmlfile.xml
um die Ausgabe in eine Datei zu kopieren.__DATA__
?Eine einfache Lösung ist die verzögerte Erweiterung, da dadurch keine Sonderzeichen geändert werden.
BEARBEITEN: Eine andere Lösung besteht darin, ein verschwindendes Zitat zu verwenden .
Diese Technik verwendet ein Anführungszeichen, um die Sonderzeichen zu zitieren
Der Trick funktioniert, da in der Sonderzeichenphase das führende Anführungszeichen
!"!
den Rest der Zeile beibehält (wenn keine anderen Anführungszeichen vorhanden sind).Und in der verzögerten Expansionsphase wird das
!"!
Testament durch den Inhalt der Variablen ersetzt"
(ein einfaches Anführungszeichen ist ein legaler Name!).Wenn Sie mit deaktivierter verzögerter Erweiterung arbeiten, können Sie
FOR /F
stattdessen eine Schleife verwenden.for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>
Da dies jedoch etwas nervig erscheint, können Sie auch ein Makro erstellen.
quelle
echo !line!
funktioniert, solange!
dieline
Variable keine enthält . Irgendein Mittel dafür?line
enthält!
, funktioniert es problemlos, aber es ist nicht immer offensichtlich, wie die Ausrufezeichen in die Variable eingefügt werden. Versuchen Sieset "line=Hello^!" & echo !line!
Die Möglichkeit, ein
>
Zeichen auszugeben , besteht darin, ihm ein^
Escape-Zeichen voranzustellen :wird einfach gedruckt
quelle
Die Antwort von Joey funktionierte nicht für mich. Nach der Ausführung
Ich habe diesen Fehler Bash: Syntaxfehler in der Nähe von unerwartetem Token `> '
Diese Lösung hat bei mir funktioniert:
Siehe auch http://www.robvanderwoude.com/escapechars.php
quelle
Warum nicht ein einfaches Anführungszeichen verwenden?
Ausgabe
quelle
Hier ist noch ein Ansatz mit
SET
undFOR /F
und Sie können es verschönern wie:
quelle
Der Fluchtcharakter hat
^
auch bei mir nicht funktioniert. Die einfachen Anführungszeichen haben bei mir funktioniert (mit ansible Scripting)Ausgabe:
quelle