使用ActiveXObject在js上获取shell执行输出

时间:2017-06-29 13:00:00

标签: javascript shell cmd

当我执行shell执行时,我尝试获取exe文件回调结果:

var oShell = new ActiveXObject("WScript.Shell");
var args = folderName + "\\dir\\scan.exe scan " + params.join(" ");
var ret = oShell.Run(args ,0 ,true);

但是ret为了失败而给了我0,为了成功而给了我1。 当我在cmd中运行这样的文件时:

scan.exe arg1 arg2 arg3

这将返回我想要的正确结果:" test / test"而不是1 ...

我能做什么?

tnx很多

1 个答案:

答案 0 :(得分:0)

我知道回答这个问题我可能有点迟,但我希望它仍能帮助别人。

我实现它的方式是oShell.Exec()功能,而不是oShell.Run()

oShell.Exec()返回一个名为StdOut的属性的对象,该属性的作用类似于文本文件,因此您可以执行ReadLine()ReadAll()等。

问题在于它不会等待命令结束,因此当您运行代码时,您的StdOut对象很可能是undefined。您必须在命令本身上添加该等待选项。

var wshShell = new ActiveXObject("WScript.Shell");

try {
    // Excecute the 'cd' command. 
    wshShell.CurrentDirectory = "C:\\Users";
    var execOut = wshShell.Exec('cmd /C start /wait /b cd');
}
catch (e) {
    console.log(e);
}

// Get command execution output.
var cmdStdOut = execOut.StdOut;
var line = cmdStdOut.ReadLine();
console.log(line);

上面的代码将在目录cd上执行C:\Users命令,并将输出存储在line变量上。

我希望这能回答这个问题。