我问了一个奇怪的问题,但我希望这可以帮助其他遇到类似问题的人。
我有常规的commands.bat 文件,我希望节点运行(执行)该文件。所以,我做了类似的事情:
let exec = require ('child_process').exec;
let myFancyProcess = await exec('commands.bat', function(error, stdout, stderr){
console.log(stdout);
});
但是好像根本不起作用。
Node.js 文档说
.exec()
期望命令或可执行文件作为第一个参数。
可能有更好的方法来运行 .bat 文件,如果您与我分享这些知识,我将不胜感激。 预先感谢!
仅供记录。运行 *.bat 文件的正确方法:
exec('call commands.bat');
const { exec } = require("child_process");
exec(`<absolute path, eg: C:/users/files>/<filename>.bat`, (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return
}
if (stderr) {
console.error(`exec stderr: ${stderr}`);
return
}
console.log(`stdout: ${stdout}`);
})
基于官方文档:https://nodejs.org/docs/v20.13.1/api/child_process.html#child_processexeccommand-options-callback
这对我来说非常有效:
// On Windows Only...
const { spawn } = require('node:child_process');
const bat = spawn('cmd.exe', ['/c', 'my.bat']);
bat.stdout.on('data', (data) => {
console.log(data.toString());
});
bat.stderr.on('data', (data) => {
console.error(data.toString());
});
bat.on('exit', (code) => {
console.log(`Child exited with code ${code}`);
});