Come passare un carattere di pipe citato a cmd.exe?
-
05-07-2019 - |
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?
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