Запустите пакетный файл Windows из node.js
Я пытаюсь запустить файл test.bat внутри node.js
вот код
var exec = require('child_process').execFile;
case '/start':
req.on('data', function (chunk) {});
req.on('end', function () {
console.log("INSIDE--------------------------------:");
exec('./uli.bat', function (err, data) {
console.log(err);
console.log(data);
res.end(data);
});
});
break;
при запуске этого node.js файла am получать
INSIDE--------------------------------:
{ [Error: Command failed: '.' is not recognized as an internal or ext
nd,
operable program or batch file.
] killed: false, code: 1, signal: null }
Ответы
Ответ 1
Я нашел решение для него.. и его работы отлично подходят для меня. Это открывает новое командное окно и запускает мой основной node JS в дочернем процессе. Вам не нужно указывать полный путь cmd.exe.
Я делал эту ошибку.
var spawn = require('child_process').spawn,
ls = spawn('cmd.exe', ['/c', 'my.bat']);
ls.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
ls.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
Ответ 2
Самый простой способ, который я знаю для выполнения, следующий код:
require('child_process').exec("path/to/your/file.bat", function (err, stdout, stderr) {
if (err) {
// Ooops.
// console.log(stderr);
return console.log(err);
}
// Done.
console.log(stdout);
});
Вы можете заменить "path/to/your/file.bat"
на __dirname + "/file.bat"
, если ваш файл находится в каталоге вашего текущего script, например.
Ответ 3
В windows я не предпочитаю spawn, так как он создает новый cmd.exe, и мы должны передавать файл .bat или .cmd в качестве аргумента. Лучшим вариантом является "exec". Пример ниже:
Обратите внимание, что в окнах вам нужно пройти путь с помощью double\e.g. C:\путь\batfilename.bat
const { exec } = require('child_process');
exec("path", (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});