6

我想从 javascript 执行一个 java 程序并想要获得输出。

Intailly我尝试了以下代码:

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 方法我无法隐藏命令提示符。我希望隐藏此命令提示符。

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

4

2 回答 2

10

是的,这困扰着所有 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);
于 2013-02-28T06:07:07.103 回答
0

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

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

“[command1]&&[command2]&&[command3]”

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

        cmd.exe /c "java -classpath . HelloWorld&&exit"
于 2021-07-14T03:40:16.823 回答