Запустите пакетный файл 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);
});