windows下node.js調用bat


node.js調用bat需要用到Child Processes模塊

因為bat是文件,所以需要使用execFile方法

 

如果指定了cwd,它會切換bat執行的目錄,類似cd的功能,如果未指定默認為當前調用程序的目錄。如果bat有輸出錯誤,例如創建指定的文件/目錄已經存在時,會返回一個錯誤信息時,調用bat會得到一個相關的錯誤信息:Error {killed: false, code: 1, signal: null}

process.execFile(url, [1, 2], {cwd:'D:/'}, function(error, stdout, stderr) {
console.log(error);
console.log(stdout);
alert(1);
});

 

如果只指定了盤符,而非一個可訪問的路徑時,會得到Error: spawn EBADF

process.execFile(url, [1, 2], {cwd:'D'}, function(error, stdout, stderr) {
console.log(error);
console.log(stdout);
alert(1);
});
 
輸出:Error {code: "EBADF", errno: "EBADF", syscall: "spawn"}
 
二種方式可以得到調用bat的返回結果,一種是直接回調函數里獲取stdout的值,還有一種是監聽子進程的data事件
var child_proc = process.execFile(url, [1, 2], {cwd:dirName}, function(error, stdout, stderr) {
console.log(error);
console.log(stdout);
});

child_proc.stdout.on('data', function(data) {
console.log(data);
});
 
假設bat的文件內容是創建三個目錄,其中二個目錄是通過參數傳遞進去的(上面代碼中的數組[1, 2],其中1、2就是參數)
@echo off

echo hahaniu~~~

mkdir %1
mkdir %2
mkdir aa

執行上面的代碼后,會在指定的目錄下(也就是代碼中cwd參數的值)創建相應的目錄,其中stdout將得到“hahaniu~~~”的輸出


 
 
除了execFile方法外,還有exec方法亦能達到目的。用exec分解調用的文件功能,如下面的示例(創建一個目錄)
process.exec("mkdir " + (new Date().getTime()), function(error, stdout, stderr) {

});


 
 
如果node.js想查詢注冊表或者其它信息,可以直接像在dos下輸入命令一下,例如查詢winrar安裝目錄
process.exec("reg query HKEY_CLASSES_ROOT\\WinRAR\\shell\\open\\command /ve", function(error, stdout, stderr) {
var path = stdout.match(/(\"[^\"]+\")/)[1]

console.log(path);
});

 
 
 
自此,以前用hta的工具都可以用node-webkit替代了
 
【參考資料】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM