从Node.js运行多个Windows命令

时间:2019-10-17 21:34:31

标签: node.js windows command-line automation

当Windows服务器收到发布请求时,我需要它来执行命令:

cd D:\project
git pull
mvn clean compile
cd target
java -jar app.jar -argument

我写了代码,但是不起作用:

const nodeCmd = require('node-cmd')

app.post((req, res) => {
  let command = `cd D:\project\my_project
                 git pull
                 mvn clean compile
                 cd target
                 java -jar app.jar ${req.body.arg}`;
  nodeCmd.get(command, (err, data, stderr) => {
    if(data) { 
     return res.json(data);
    }
    return err;
 });
})

这是错误消息:

{ Error: Command failed: cd D:projectmy_project && dir
The system cannot find the path specified.

    at ChildProcess.exithandler (child_process.js:294:12)
    at ChildProcess.emit (events.js:198:13)
    at maybeClose (internal/child_process.js:982:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
  killed: false,
  code: 1,
  signal: null,
  cmd: 'cd D:Tempautobooker && dir' }

3 个答案:

答案 0 :(得分:1)

我对在Windows中运行此类任务了解不多,但是我怀疑您可能需要将它们分解为多个调用或在它们之间进行&&

答案 1 :(得分:1)

命令字符串中的反斜杠不会转义。您可以使用string.raw来指示JS引擎将模板文字视为原始字符串。

let command = String.raw`cd D:\project\my_project
                         git pull
                         mvn clean compile
                         cd target
                         java -jar app.jar ${req.body.arg}`;

答案 2 :(得分:1)

根据node-cmd文档,您的代码很完美, 但是我认为您的问题出在您的项目路径中,这意味着您的第一个命令未执行,这是因为您的反斜杠未转义,根据错误消息,您的路径为projectmy_project,这是不正确的,您需要更新像这样的D:\\project\\my_project