Domanda

Voglio invocare:

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

utilizzando cmd.exe. Nella mia esperienza, cmd.exe elimina la prima coppia di virgolette (causando la mancata ricerca dell'eseguibile) o la seconda coppia di virgolette (causa l'interpretazione errata del carattere pipe). Come si passa un carattere pipe citato a cmd.exe?

È stato utile?

Soluzione

Puoi farlo nel modo che stai facendo lì, racchiudendo la stringa tra | tra virgolette.

Oppure puoi sfuggire con accento circonflesso ^:

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

Come nota a margine: perché lo stai costruendo con DevEnv invece di MSBuild?

Altri suggerimenti

Il carattere caret (^) è un carattere shell speciale per sfuggire al personaggio per cose come < ;, > ;, (,), ...

cmd/c "echo Hello ^"  World"

Output

Hello " World

Ecco un'altra soluzione (soluzione alternativa?) che ho trovato:

innanzitutto, assicurarsi che una variabile d'ambiente definisca il carattere pipe, ad esempio:
set PIPE="|"

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

Lo fa anche se ci sono più wrapper tra il chiamante e il chiamante. Ora lo sto usando con una catena molto lunga di involucri: Python / Linux - & Gt; Il guest di VirtualBox executeProcess - & Gt; Cmd / Windows - & Gt; devenv.com

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top