Мне нужно выполнить пакетный скрипт Windows.В соответствии с политикой компании я должен использовать boost::process::child
в этом отношении.Путь к пакетному сценарию Windows содержит пробелы (например, 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()
мог правильно найти / выполнить пакетный скрипт?