从nodejs执行一个batch file

是否有可能从nodejs应用程序运行batch file?

Googlesearch一段时间后,我们可以使用child_process来执行命令。 尝试相同的模块,但没有成功。

有人可以指导我吗?

这创build了一个名为exec()的单个函数来执行批处理脚本的NodeJS模块。

 var exec = require('child_process').exec, path = require('path'), os = require('os'); fs = require('fs'); // HACK: to make our calls to exec() testable, // support using a mock shell instead of a real shell var shell = process.env.SHELL || 'sh'; // support for Win32 outside Cygwin if (os.platform() === 'win32' && process.env.SHELL === undefined) { shell = process.env.COMSPEC || 'cmd.exe'; } // Merges the current environment variables and custom params for the environment used by child_process.exec() function createEnv(params) { var env = {}; var item; for (item in process.env) { env[item] = process.env[item]; } for(item in params) { env[item] = params[item]; } return env; } // scriptFile must be a full path to a shell script exports.exec = function (scriptFile, workingDirectory, environment, callback) { var cmd; if (!workingDirectory) { callback(new Error('workingDirectory cannot be null'), null, null); } if (!fs.existsSync(workingDirectory)) { callback(new Error('workingDirectory path not found - "' + workingDirectory + '"'), null, null); } if (scriptFile === null) { callback(new Error('scriptFile cannot be null'), null, null); } if (!fs.existsSync(scriptFile)) { callback(new Error('scriptFile file not found - "' + scriptFile + '"'), null, null); } // transform windows backslashes to forward slashes for use in cygwin on windows if (path.sep === '\\') { scriptFile = scriptFile.replace(/\\/g, '/'); } // TODO: consider building the command line using a shell with the -c argument to run a command and exit cmd = '"' + shell + '" "' + scriptFile + '"'; // execute script within given project workspace exec(cmd, { cwd: workingDirectory, env: createEnv(environment) }, function (error, stdout, stderr) { // TODO any optional processing before invoking the callback callback(error, stdout, stderr); } ); }; 

我已经find了解决scheme..它的作品罚款给我。 这将打开一个新的命令窗口,并在subprocess中运行我的主节点JS。 您不需要提供cmd.exe的完整path。 我犯了这个错误。

 var spawn = require('child_process').spawn, ls = spawn('cmd.exe', ['/c', 'startemspbackend.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); });