2009-07-29 16 views
14

Voglio richiamare:Come passare un carattere pipe quotato a cmd.exe?

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

utilizzando cmd.exe. Nella mia esperienza, cmd.exe toglie la prima coppia di virgolette (causando l'impossibilità di trovare l'eseguibile) o la seconda coppia di virgolette (causando un'interpretazione errata del carattere del tubo). Come si passa un carattere pipe quotato a cmd.exe?

risposta

20

È possibile farlo nel modo in cui lo si sta facendo, racchiudendo la stringa con il valore | tra virgolette.

Oppure si può scappare con l'accento circonflesso ^:

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

Come nota a margine: Perché si stanno costruendo questo con devenv invece di MSBuild?

+0

devenv è sempre stata "abbastanza buono" e non aveva familiarità con MSBuild . Ho un sistema di creazione multipiattaforma che richiama DevEnv sotto il cofano quindi non penso di guadagnare molto usando MSBuild. Io? – Gili

+0

A proposito, dove è documentato questo personaggio di fuga? – Gili

+0

Ad esempio http://technet.microsoft.com/en-us/library/bb490954.aspx qui – Joey

5

L'accento circonflesso (^) carattere è caratteri speciali della shell per sfuggire carattere per cose come <,>, (,), ...

cmd/c "echo Hello ^" World" 

uscita

Hello " World 
4

Ecco un'altra soluzione (ho trovato:

prima, assicurarsi che una variabile di ambiente definisca il carattere del tubo, ad esempio:
set PIPE="|"

successivamente, eseguire il comando specificando il nome della variabile ambiente sopra definito:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

che fa il lavoro, anche se ci sono più involucri tra il chiamante e il chiamato. Ora sto usando con una lunga catena di involucri: Python/Linux -> ospite VirtualBox executeProcess -> Cmd/Windows -> devenv.com

Problemi correlati