2009-12-06 11 views
17

Ich habe eine Variable in meiner Batch-Datei und es enthält das Pipe-Symbol (dieses: |), wenn ich die Variable Echo ich bekomme einen Fehler über einen unbekannten internen/externen Befehl.Batch-Echo-Pipe-Symbol verursacht unerwartetes Verhalten

Ich brauche einen Weg, um es entweder echo richtig oder besser zu bekommen, aber entfernen Sie alles nach und einschließlich der | Symbol sowie etwaige zusätzliche Leerzeichen davor.

Antwort

32

Es gibt mehrere Sonderzeichen in Anführungszeichen

echo \| 

oder wickeln entgehen, wenn in Windows Batch-Dateien verwendet allgemein entwertet werden müssen. Hier ist eine unvollständige Liste: < > & |^%

Das Escape-Zeichen ist ^. So bekommen eine wörtliche |, sollten Sie dies tun:

echo ^| 

Wenn die Sonderzeichen in einer Variablen ist, wird es ein bisschen schwieriger. Aber wenn Sie spezielle Syntax verwenden, können Sie Zeichen in einer Variablen wie folgt ersetzen:

+2

Wenn Sie mit Dateisystempfaden aus dem Benutzer/Benutzer-System umgehen, ist es ziemlich unmöglich, den Weg zu etwas ohne Sonderzeichen korrekt zu entkommen. (Dateinamen können%,!, ^, & Etc enthalten) – Anders

+0

Etwas zu beachten ist, dass%% nicht funktioniert, für% es müssen Sie mit einem anderen% entkommen (d. H. %% verwenden). – Keen

2

es

echo "|" 
+0

ich es konnte nicht entkommen, wie die Variable von einem anderen Befehl kam, arbeitete quotes ... obwohl, warum habe ich nicht vor daran denken ... Wenn nun zu sehen, ich kann Stattdessen werden alle unerwünschten Daten entfernt ... – Hintswen

+0

Durch Anführungszeichen werden die Anführungszeichen jedoch ausgegeben. – Joey

+0

Ich dachte eigentlich Unix, als ich das schrieb, also ist es ziemlich schade! –

3

Sie müssen die | entkommen Zeichen vor dem Drucken der Var. Die folgenden druckt a | b

@echo off 

set x=a^|b 
echo %x:|=^|% 
+0

Vielen Dank - das ist die einzige "echte" Lösung für das Problem "Ausgabevariable, die (möglicherweise) eine Pipe enthalten könnte" - und eigentlich sollte etwas "sicheres" Skript immer tun ... –