22 votes

Comment passer un caractère pipe cité à cmd.exe ?

Je veux invoquer :

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

en utilisant cmd.exe. D'après mon expérience, cmd.exe supprime soit la première paire de guillemets (ce qui fait que l'exécutable n'est pas trouvé), soit la deuxième paire de guillemets (ce qui fait que le caractère pipe est mal interprété). Comment passer un caractère pipe entre guillemets à cmd.exe ?

31voto

Joey Points 148544

Vous pouvez soit le faire de la manière dont vous le faites ici, en entourant la chaîne de caractères de la balise | entre guillemets.

Ou vous pouvez l'échapper avec l'option accent circonflexe ^ :

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

En passant, pourquoi le construire avec DevEnv au lieu de MSBuild ?

7voto

Ahmed Points 5613

Le caractère caret (^) est un caractère spécial de l'interpréteur de commandes permettant d'échapper à des caractères tels que <, >, (, ), ...

cmd/c "echo Hello ^"  World"

Sortie

Hello " World

6voto

rdesgroppes Points 101

Voici une autre solution (contournement ?) que j'ai trouvée :

Tout d'abord, assurez-vous qu'une variable d'environnement définit le caractère pipe, par exemple :
set PIPE="|"

plus tard, exécutez la commande en spécifiant le nom de la variable d'environnement définie ci-dessus :
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

Cela fait l'affaire même s'il y a plusieurs wrappers entre l'appelant et l'appelé. Je l'utilise maintenant avec une très longue chaîne de wrappers : Python/Linux -> executeProcess de l'invité VirtualBox -> Cmd/Windows -> devenv.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X