想要使用WshShell.Exec方法隐藏命令提示符窗口

时间:2013-02-28 05:59:55

标签: javascript

我想从javascript执行java程序并希望得到输出。

我尝试使用以下代码:

WshShell = new ActiveXObject("WScript.Shell");
var launch="cmd.exe /c java -classpath . HelloWorld ";
var cmdRun = WshShell.Run(launch,0,true);

通过Run方法,我无法获得该类的输出。

然后我尝试使用以下代码:

WshShell = new ActiveXObject("WScript.Shell");
var launch="cmd.exe /c p java classpath . HelloWorld ";
var cmdRun = WshShell.Exec(launch);
while (cmdRun.Status == 0) // wait for the command to finish
{
sleep(100);
}
var output = cmdRun.StdOut.ReadAll();
alert(output);

现在我可以在变量输出中获得输出。

我的问题是使用Run方法我可以隐藏命令提示(通过传递参数WshShell.Run(launch,0,true)) 通过使用Exec方法,我无法隐藏命令提示。我希望隐藏此命令提示。

在这方面你能帮我吗? 谢谢

2 个答案:

答案 0 :(得分:9)

是的,这会困扰所有wsh脚本编写者。无法隐藏wshExec对象,只有.Run允许此选项,但在这种情况下不允许StdOut。不久,唯一的方法是将输出重定向到文件。

WshShell   = new ActiveXObject("WScript.Shell");
var launch ="cmd.exe /c java -classpath . HelloWorld > output.txt";
var cmdRun = WshShell.Run(launch,0,true);

答案 1 :(得分:0)

我知道这个线程已经很老了,但我刚刚遇到了同样的问题,并通过在关闭窗口的命令字符串中添加“exit”找到了解决方案。

来自 Microsoft Docs 的 cmd 页面:
您可以为 [string] 指定多个命令。用命令分隔符 && 将它们分开,并用引号将它们括起来。例如:

"[command1]&&[command2]&&[command3]"

因此,您传递给 WshShell.Exec 的完整命令字符串将如下所示:

        cmd.exe /c "java -classpath . HelloWorld&&exit"