2014-03-27 31 views
10

Windows批處理文件我嘗試運行test.bat的文件中的Node.js運行從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我得到

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

如果您發佈了完整的輸出,而不是奇怪的裁剪部分,那會更好:)。另外,那個'./'路徑看起來非常unixy – slezica

+0

它是完整的輸出 – Sush

+0

您是否在.bat文件的路徑中沒有'。/'試過? – fiskeben

回答

10

我找到了它的解決方案..它的作品對我來說很好。這將打開一個新的命令窗口並在子進程中運行我的主節點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); 
}); 
+0

這不適用於窗口。 Spawn只能在linux shell環境下工作。 – Sohan

+7

我可以證實,這確實可以在Windows中執行'.bat'文件。 – davidmdem

+0

在windows下,如果你想使用批處理文件的相對路徑;使用模板字符串像這樣:'產卵( 'cmd.exe的',[ 「/ C」,\'.. \\ BINARIES \\ t1.bat \'],{ENV:process.env});' – user3526

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); 
}); 

您可以通過__dirname + "/file.bat"如果你的文件是例如您當前腳本的目錄替換"path/to/your/file.bat"

+0

不管我如何努力做到這一點,我得到了同樣的錯誤: '錯誤:命令失敗:E:/devProj/instager/start.bat 錯誤:不支持輸入重定向,立即退出進程。 在ChildProcess.exithandler(child_process.js:217:12) 在emitTwo(events.js:106:13) 在ChildProcess.emit(events.js:194:7) 在maybeClose(內部/ child_process.js :899:16) 在Process.ChildProcess._handle.onexit(內部/ child_process.js:226:5) 殺死:假, 代碼:1, 信號:空, CMD:「E:/ devProj/instager/start.bat'' –

0

在Windows中,因爲它創造了一個新的CMD.EXE我不喜歡產卵,我們必須通過.bat或.cmd文件作爲argument.'exec」是更好的選擇。下面的例子:

請注意,在Windows中,需要傳遞路徑用雙\例如C:\ path \ batfilename.bat

const { exec } = require('child_process'); 
exec("path", (err, stdout, stderr) => { 
    if (err) { 
    console.error(err); 
    return; 
    } 
    console.log(stdout); 
});