Comment passer un caractère de pipe cité à cmd.exe?
-
05-07-2019 - |
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?
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