2009-07-29 6 views
14

Ich möchte rufen:Wie wird ein zitiertes Pipe-Zeichen an cmd.exe übergeben?

"c:\(...)\devenv.com" foo.sln /build "Debug|Win32" 

cmd.exe verwenden. Meiner Erfahrung nach entfernt cmd.exe entweder das erste Anführungszeichen (wodurch die ausführbare Datei nicht gefunden wird) oder das zweite Anführungszeichen (wodurch das Pipe-Zeichen falsch interpretiert wird). Wie übergibt man ein zitiertes Pipe-Zeichen an cmd.exe?

Antwort

20

Sie können es entweder so machen, wie Sie es tun, indem Sie die Zeichenfolge mit dem | in Anführungszeichen einschließen.

Oder man kann es mit dem Circumflex entkommen^:

"c:\(...)\devenv.com" foo.sln /build Debug^|Win32 

Als Randbemerkung: Warum sind mit devenv Sie diese MSBuild anstelle des Gebäudes?

+0

DevEnv war immer "gut genug" und ich war nicht vertraut mit MSBuild . Ich habe ein plattformübergreifendes Build-System, das DevEnv unter der Haube aktiviert, so dass ich glaube nicht, dass ich durch die Verwendung von MSBuild viel erhalte. Tu ich? – Gili

+0

Übrigens, wo ist dieser Escape-Charakter dokumentiert? – Gili

+0

Zum Beispiel http://technet.microsoft.com/en-us/library/bb490954.aspx hier – Joey

5

Das Caret (^) Zeichen spezielle Shell-Zeichen Zeichen für Dinge wie <,>, (,),

cmd/c "echo Hello ^" World" 

Ausgabe

Hello " World 
4

eine andere Lösung hier ... zu entkommen (Workaround?) Ich habe gefunden:

zuerst sicherstellen, dass eine Umgebungsvariable das Pipe-Zeichen definiert, zum Beispiel:
set PIPE="|"

später, führen Sie den Befehl, um die oben definierten Umgebung Variablennamen angeben:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

dass der Job nicht, auch wenn es mehrere Wrapper zwischen dem Anrufer und dem Angerufenen. Ich benutze es jetzt mit einer sehr langen Kette von Wrappern: Python/Linux -> VirtualBox Gast executeProcess -> Cmd/Windows -> devenv.com

Verwandte Themen