当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' }
答案 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