如何使用boost :: process :: child处理路径中的空格?

时间:2019-04-08 08:56:26

标签: c++ batch-file boost

我需要执行Windows Batch脚本。根据公司政策,我必须为此使用boost::process::child。 Windows Batch脚本的路径包含空格(例如C:\Foo Bar\batch.bat)。

我正在使用以下代码:

namespace bp = boost::process;
error_code errorCode;
bp::ipstream errorStream;
auto child = bp::child("C:\\Foo Bar\\batch.bat",
    errorCode,
    bp::std_out > bp::null,    // ignore standard output
    bp::std_err > errorStream, // capture standard error
    bp::windows::hide,        // hide window
    bp::shell);               // use shell

  vector<string> errorData;
  string errorLine;

  while (child.running() && getline(errorStream, errorLine) && !errorLine.empty())
  {
    errorData.push_back(errorLine);
  }
  child.wait();

问题是系统(boost :: process)未找到路径。错误消息如下:

  

'C:\ Foo'不被识别为内部或外部命令,可操作程序或批处理文件。

我还尝试了以下遮罩变体:

  • C:\\Foo Bar\\batch.bat
  • C:\\Foo\ Bar\\batch.bat
  • "C:\\Foo Bar\\batch.bat"
  • C:\\Foo~1\\batch.bat

如何正确屏蔽空白,以便child()可以正确查找/执行批处理脚本?

4 个答案:

答案 0 :(得分:0)

This dependency was not found: * -!../../../css-loader/index.js??ref--6-oneOf-3-1!../../../postcss- loader/src/index.js??ref--6-oneOf-3-2!./@ckeditor/ckeditor5-theme- lark/theme/mixins/_rwd.css in ./node_modules/css-loader??ref--6-oneOf-3- 1!./node_modules/postcss-loader/src??ref--6-oneOf-3- 2!./node_modules/@ckeditor/ckeditor5-image/theme/textalternativeform.css To install it, you can run: npm install --save -!../../../css- loader/index.js??ref--6-oneOf-3-1!../../../postcss-loader/src/index.js?? ref--6-oneOf-3-2!./@ckeditor/ckeditor5-theme-lark/them 包装到"C:\\Foo Bar\\batch.bat"中,以便它为您引用字符串:

boost::filesystem::path()

答案 1 :(得分:0)

我建议遵循@Maxim的回答。

或者,使用反斜杠转义空格:

"C:\\Foo\\ Bar\\batch.bat"

答案 2 :(得分:0)

windef.h

答案 3 :(得分:0)

假定将其转换为Windows CreateProcess调用,则应用程序的路径必须用双引号引起来,以便在路径中保留空格。实际上,建议始终将路径用双引号引起来。

因此您将使用:

ValueError: <2 * MonthEnds> is a non-fixed frequency

我不知道Boost :: child是否真的允许它工作。