2009-07-29 55 views
14

que desea invocar:¿Cómo pasar un carácter de tubería entre comillas a cmd.exe?

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

utilizando cmd.exe. En mi experiencia, cmd.exe elimina el primer par de comillas (lo que hace que no se encuentre el ejecutable) o el segundo par de comillas (lo que hace que el carácter de la tubería sea malinterpretado). ¿Cómo transfiere un carácter de tubería entre comillas a cmd.exe?

Respuesta

20

Puede hacerlo de la manera que lo hace allí, encerrando la cadena con el | entre comillas.

O puede escapar de ella con el acento circunflejo ^:

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

Como nota al margen: ¿Por qué estás construyendo esto con Devenv en lugar de MSBuild?

+0

DevEnv siempre fue "lo suficientemente bueno" y no estaba familiarizado con MSBuild . Tengo un sistema de compilación multiplataforma que invoca a DevEnv bajo el capó, así que no creo que gane mucho usando MSBuild. ¿Yo? – Gili

+0

Por cierto, ¿dónde está documentado este personaje de escape? – Gili

+0

Por ejemplo http://technet.microsoft.com/en-us/library/bb490954.aspx aquí – Joey

5

El símbolo de intercalación (^) es de carácter caracteres especiales de shell para escapar de caracteres para cosas como <,>, (,), ...

cmd/c "echo Hello ^" World" 

salida

Hello " World 
4

Aquí hay otra solución (¿solución alternativa?) He encontrado:

primero, asegúrese de que una variable de entorno define el carácter de la tubería, por ejemplo:
set PIPE="|"

después, ejecutar el comando especificando el nombre de variable de entorno definida anteriormente:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

que hace el trabajo, incluso si hay varios envoltorios entre la persona que llama y el destinatario de la llamada. Ahora lo estoy usando con una larga cadena de contenedores: Python/Linux -> VirtualBox guest's executeProcess -> Cmd/Windows -> devenv.com

Cuestiones relacionadas