我需要执行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()
可以正确查找/执行批处理脚本?
答案 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是否真的允许它工作。