Como passar um caractere de tubo citado para cmd.exe?
-
05-07-2019 - |
Pergunta
Eu quero invocar:
"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
usando cmd.exe. Na minha experiência, o cmd.exe retira o primeiro par de citações (fazendo com que o executável não seja encontrado) ou o segundo par de citações (fazendo com que o caractere do tubo seja mal interpretado). Como você passa um caractere de tubo citado para cmd.exe?
Solução
Você pode fazer isso da maneira que está fazendo lá, envolvendo a string com o |
em aspas.
Ou você pode escapar com o sotaque circunflexo ^
:
"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
Como nota lateral: por que você está construindo isso com Devenv em vez de msbuild?
Outras dicas
O caráter careta (^) é um personagem de concha especial para escapar do personagem para coisas como <,>, (,), ...
cmd/c "echo Hello ^" World"
Resultado
Hello " World
Here's another solution (workaround?) I've found:
first, ensure an environment variable defines the pipe character, for example:
set PIPE="|"
later, run the command specifying the above defined environment variable name:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32
That does the job even if there are multiple wrappers between the caller and the callee. I'm now using it with a very long chain of wrappers: Python/Linux -> VirtualBox guest's executeProcess -> Cmd/Windows -> devenv.com