【发布时间】:2010-11-15 01:46:46
【问题描述】:
我想调用:
"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
使用 cmd.exe。根据我的经验, cmd.exe 要么去掉第一对引号(导致找不到可执行文件),要么去掉第二对引号(导致管道字符被误解)。 如何将带引号的管道字符传递给 cmd.exe?
【问题讨论】:
标签: cmd
我想调用:
"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
使用 cmd.exe。根据我的经验, cmd.exe 要么去掉第一对引号(导致找不到可执行文件),要么去掉第二对引号(导致管道字符被误解)。 如何将带引号的管道字符传递给 cmd.exe?
【问题讨论】:
标签: cmd
您可以按照自己的方式进行操作,用引号将| 括起来。
或者你可以用 circumflex 重音 ^:
"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
附带说明:为什么要使用 DevEnv 而不是 MSBuild 来构建它?
【讨论】:
插入符号 (^) 字符是特殊的 shell 字符,用于转义字符,例如 、(、)、...
cmd/c "echo Hello ^" World"
输出
Hello " World
【讨论】:
这是我发现的另一个解决方案(解决方法?):
首先,确保环境变量定义了管道字符,例如:set PIPE="|"
稍后,运行指定上述定义的环境变量名称的命令:"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32
即使调用者和被调用者之间有多个包装器,它也能完成工作。我现在将它与很长的包装链一起使用: Python/Linux -> VirtualBox 来宾的 executeProcess -> Cmd/Windows -> devenv.com
【讨论】:
powershell -c %variable%的变量的唯一方法。 set variable=' ... | ...' 和 set variable=" ... | ... " 以及带有或不带有单引号或双引号的 ^| 的任何组合都不适合我。变量的定义已经报错了。