2013-07-08 40 views
0

我正在使用Node FFI模塊,並試圖在Windows上運行同步任務。我可以使用以下代碼成功運行任務。在窗口上使用node.js運行同步任務

var ffi=require('ffi') 
var nativeC = new ffi.Library("Kernel32", { 
"WinExec": ["int32", ["string"]] 
}); 

nativeC.WinExec('ls -lrt'); 

我想這是執行同步任務的方式,但是這個代碼總是一號「LS -lrt」命令後退出;如果我再鏈接一些命令,它們將不起作用。那麼,FFI模塊中是否有一個回調函數,或者另一種方式是我可以在Windows上的node.js中鏈接命令,以便它們一個接一個地同步運行。

+0

['ls'](http://linux.die.net/man/1/ls )通常在Windows [PowerShell外](http://technet.microsoft.com/en-us/library/hh849800.aspx)(並且不能識別'-lrt'選項)的Windows中不可用。命令是否在'cmd.exe'中工作?對於多個用戶? –

+0

所以,我使用Git bash,所以我可以使用ls,我想發佈這個,所以對不起,我沒有。 – anonymous123

+0

嘗試'nativeC.WinExec('bash -c「ls -lrt'');'。即使你使用'bash'來執行腳本,['WinExec()'似乎沒有使用它](http://msdn.microsoft.com/en-us/library/windows/desktop/ms687393 .aspx)(注意它的第二個參數)。 –

回答

1

我不確定你需要WinExec來運行Windows命令。正如Jonathan指出的那樣,ls不可用。

但是,如果你想鏈命令,你可以使用async.js和exec這樣的:

var 
    async = require('async'); 
    exec = require('child_process').exec, 
    commands = [ 'dir /w', 'echo test']; 

var executeCommand = function(command, callback){ 
    exec(command, function (err, stdout, stderr) { 
    if(err) return callback(err); 
    console.log(stdout); 
    callback(); 
    }); 
}; 

async.eachSeries(commands, executeCommand, function(err){ 
    console.log('error: ' + err); 
}); 
+0

謝謝,這就是我一直在尋找的東西 – anonymous123

相關問題