如何将带引号的管道字符传递给cmd.exe?

如何将带引号的管道字符传递给cmd.exe?,cmd,Cmd,我想调用: "c:\(...)\devenv.com" foo.sln /build "Debug|Win32" 使用cmd.exe。根据我的经验,cmd.exe要么去掉第一对引号(导致找不到可执行文件),要么去掉第二对引号(导致管道字符被误解)如何将带引号的管道字符传递给cmd.exe?您可以按照现在的方式传递,用引号将字符串括起来 或者您可以使用扬抑重音转义: "c:\(...)\devenv.com" foo.sln /build Debug^|Win32 作为旁注:为什么要用DevE

我想调用:

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

使用cmd.exe。根据我的经验,cmd.exe要么去掉第一对引号(导致找不到可执行文件),要么去掉第二对引号(导致管道字符被误解)如何将带引号的管道字符传递给cmd.exe?

您可以按照现在的方式传递,用引号将字符串括起来

或者您可以使用扬抑重音转义:

"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
作为旁注:为什么要用DevEnv而不是MSBuild来构建它?

插入符号(^)字符是特殊的shell字符,用于转义字符,例如,(,)

输出

Hello " World
我发现了另一个解决方案(变通方法?):

首先,确保环境变量定义管道字符,例如:
set PIPE=“|”

稍后,运行指定上述定义的环境变量名称的命令:
“c:\(…)\devenv.com”foo.sln/build Debug%PIPE%Win32

即使调用者和被调用者之间有多个包装器,这也可以完成任务。我现在将它与一条很长的包装链一起使用:
Python/Linux->VirtualBox guest的executeProcess->Cmd/Windows->devenv.com

devenv总是“足够好”,我不熟悉MSBuild。我有一个调用DevEnv的跨平台构建系统,所以我认为使用MSBuild不会有什么好处。是吗?顺便问一下,这个转义字符记录在哪里?这是我定义变量的唯一方法,我将该变量传递给
powershell-c%variable%
set变量='…|…'
设置变量=“…|…”
或任何带有或不带有单引号或双引号的
^ |
组合对我都有效。变量的定义已给出错误。
Hello " World