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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top