我想调用:
"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
使用cmd.exe。根据我的经验,cmd.exe要么删除第一对引号(导致找不到可执行文件),要么删除第二对引号(导致管道符号被误解)。 如何将引用的管道字符传递给cmd.exe?
答案 0 :(得分:25)
您可以按照您在那里的方式执行此操作,将带有|
的字符串括在引号中。
或者你可以使用抑扬音 ^
来逃避它:
"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
作为旁注:为什么要使用DevEnv而不是MSBuild构建它?
答案 1 :(得分:6)
插入符号(^)是用于转义字符的特殊shell字符,例如<,>,(,),...
cmd/c "echo Hello ^" World"
输出
Hello " World
答案 2 :(得分:6)
这是另一个解决方案(解决方法?)我发现:
首先,确保环境变量定义管道特征,例如:
set PIPE="|"
稍后,运行指定上面定义的环境变量名称的命令:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32
即使调用者和被调用者之间有多个包装器,它也能完成这项工作。我现在正在使用它与一个很长的包装链: Python / Linux - > VirtualBox guest的executeProcess - > Cmd / Windows - > devenv.com