¿Cómo pasar un carácter de tubería citado a cmd.exe?
-
05-07-2019 - |
Pregunta
Quiero invocar:
"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
usando 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 se malinterprete). ¿Cómo se pasa un carácter de comilla citado a cmd.exe?
Solución
Puede hacerlo de la manera en que lo hace allí, encerrando la cadena con el |
entre comillas.
O puede escapar con el acento circunflejo ^
:
"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
Como nota al margen: ¿Por qué está creando esto con DevEnv en lugar de MSBuild?
Otros consejos
El carácter de intercalación (^) son caracteres especiales de shell para escapar del carácter para cosas como < ;, > ;, (,), ...
cmd/c "echo Hello ^" World"
Salida
Hello " World
Aquí hay otra solución (¿solución?) que he encontrado:
primero, asegúrese de que una variable de entorno defina el carácter de la tubería, por ejemplo:
set PIPE="|"
más tarde, ejecute el comando que especifica el nombre de la variable de entorno definida anteriormente:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32
Eso hace el trabajo incluso si hay varios contenedores entre la persona que llama y la persona que llama. Ahora lo estoy usando con una cadena muy larga de envoltorios: Python / Linux - & Gt; VirtualProx guest's executeProcess - & Gt; Cmd / Windows - & Gt; devenv.com