batch file不可执行不像shell脚本?

我正在使用boost.process运行一个给定的input外部进程。 用户可以指定该外部进程。 所以大部分时间用户指定一个shell脚本或批处理脚本。

我只是做boost::process::launch(_script, arguments, context); 只要它们是可执行文件(+ x)​​,就可以同时运行真正的可执行文件和shell脚本。 但是当我在窗口中运行它。 它不起作用如果我在_script传递一个batch file,但是如果我指定一个真正的可执行文件,它将起作用。

这使我认为在Windows批处理脚本根本不是可执行文件? 他们只是通过cmd.exe解释! 这是真的 ?

我可以启动cmd.exe并指定/c _script argv作为命令行参数。 但那不会是跨平台的。

我不想进行system()调用,因为我不会完全控制创build的进程?

没错,批处理文件不是直接可执行的,需要一个命令处理器来运行它们。

也就是说,解决可移植性问题应该相当简单,可以在编译时(通过预处理器宏)或运行时(Windows特定的环境变量?脚本文件扩展名?)完成。

我可能会跟前者一样更强大。