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

时间:2009-07-29 13:23:44

标签: cmd

我想调用:

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

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

3 个答案:

答案 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