使用非包装pipe道符号的QProcess 在参数列表中

你好亲爱的stackoverflow用户,

尝试在Windows上使用QProcess运行命令时遇到问题。 除了解释一个论点之外,一切正常。

我正在调用vcbuild.exe来构build一个visual studio 2008解决scheme。 这个调用看起来像这样:

QString program = "cmd.exe"; QStringList arguments; arguments << getenv(VS90COMNTOOLS) + "\\vsvars32.bat" << "&" << "vcbuild.exe" << pathToSolution << "Debug|Win32"; QProcess::execute( program, arguments ); 

问题是,像“Debug | Win32”这样的名称是许多解决scheme的通用configuration名称,我想要通过编程方式调用我的程序使用QProcess – 但符号“|” 被视为一个pipe道符号和窗户说:“命令Win32是错误的或找不到。 (原文“Der Befehl”Win32“ist entweder falsch geschrieben oder konnte nicht gefunden werden。”)

如果我尝试使用引号:

  arguments << [...] << "\"Debug|Win32\"" 

错误是:“vcbuild.exe:错误VCBLD0006:无效的configuration名称:”Debug | WIN32“。” (orig。“vcbuild.exe:Fehler VCBLD0006:UngültigerKonfigurationsname:”DEBUG | WIN32“。”)显然,引号现在是名称的一部分,使得pipe道符号不再被视为pipe道符号,而现在configuration名称是错误的。 通过尝试和错误,我发现Qt包装了三个引号。 这就好像我会写:

  vcbuild.exe [...] """Debug|Win32""" 

解决方法是将所有内容放入一个大string中,但是这将是我最后一个不想要的select,因为这样我就不得不根据引号或空格自己做所有的引用。

有人知道答案如何解决我的问题? 先谢谢你!

尝试使用^作为转义字符,即"Debug^|Win32" 。 有关详细信息,请参阅cmd Escape Character 。