鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 關(guān)于Node.js child_process.execFile在windows

關(guān)于Node.js child_process.execFile在windows上運行.bat文件的問題

官方文檔上Spawning .bat and .cmd files on Windows這部分的意思是.bat, .cmd本身不是可執(zhí)行的(executable),所以在windows上無法通過execFile直接運行。但是我在實際測試中是可以直接運行的:
js代碼主要就一句執(zhí)行bat文件的:

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

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

echo 'hello'

結(jié)果是能執(zhí)行的,正常來說不應(yīng)該是不能執(zhí)行的嗎?

回答
編輯回答
半心人

child_process.exec() 和 child_process.execFile() 之間的重大區(qū)別會根據(jù)平臺的不同而不同。 在類
Unix 操作系統(tǒng)上(Unix、 Linux、 macOS),child_process.execFile()
效率更高,因為它不需要衍生一個 shell。 但是在 Windows 上,.bat 和 .cmd
文件在沒有終端的情況下是不可執(zhí)行的,因此不能使用 child_process.execFile() 啟動。 當(dāng)在 Windows
下運行時,要調(diào)用 .bat 和 .cmd 文件,可以通過使用設(shè)置了 shell 選項的 child_process.spawn()、或使用
child_process.exec()、或衍生 cmd.exe 并將 .bat 或 .cmd 文件作為一個參數(shù)傳入(也就是 shell
選項和 child_process.exec() 所做的工作)。 在任何情況下,如果腳本文件名包含了空格,則需要用加上引號。

2018年7月8日 08:56