Question

Je veux appeler:

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

utilisant cmd.exe. Selon mon expérience, cmd.exe supprime soit la première paire de guillemets (ce qui empêche l'exécutable d'être trouvé), soit la deuxième paire de guillemets (provoquant une interprétation erronée du caractère de canal). Comment passez-vous un caractère de pipe cité à cmd.exe?

Était-ce utile?

La solution

Vous pouvez le faire comme vous le faites ici, en encadrant la chaîne par les | guillemets.

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

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

Remarque: pourquoi construisez-vous cela avec DevEnv au lieu de MSBuild?

Autres conseils

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

cmd/c "echo Hello ^"  World"

Sortie

Hello " World

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

d'abord, assurez-vous qu'une variable d'environnement définit le caractère de canal, 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 le travail 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 d'emballages: Python / Linux - & Gt; ExecuteProcess de l'invité VirtualBox - & Gt; Cmd / Windows - & Gt; devenv.com

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top