关于Node.js child_process.execFile在windows上运行.bat文件的问题

官方文档上Spawning .bat and .cmd files on Windows这部分的意思是.bat, .cmd本身不是可执行的(executable),所以在windows上无法通过execFile直接运行。但是我在实际测试中是可以直接运行的:
js代码主要就一句执行bat文件的:

execFile('echo.bat', (err, stdout, stderr) => {
    console.log(stdout)
})

.bat文件里就只有一句echo语句:

echo 'hello'

结果是能执行的,正常来说不应该是不能执行的吗?

阅读 10k
1 个回答

child_process.exec() 和 child_process.execFile() 之间的重大区别会根据平台的不同而不同。 在类
Unix 操作系统上(Unix、 Linux、 macOS),child_process.execFile()
效率更高,因为它不需要衍生一个 shell。 但是在 Windows 上,.bat 和 .cmd
文件在没有终端的情况下是不可执行的,因此不能使用 child_process.execFile() 启动。 当在 Windows
下运行时,要调用 .bat 和 .cmd 文件,可以通过使用设置了 shell 选项的 child_process.spawn()、或使用
child_process.exec()、或衍生 cmd.exe 并将 .bat 或 .cmd 文件作为一个参数传入(也就是 shell
选项和 child_process.exec() 所做的工作)。 在任何情况下,如果脚本文件名包含了空格,则需要用加上引号。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题