Runtime.getRuntime()。exec(),隐藏控制台屏幕

时间:2009-06-15 10:01:14

标签: java runtime.exec

我正在使用Java代码执行批处理文件。代码如下:

Process proc = null;

proc = Runtime.getRuntime().exec("cmd /c start somebat.bat");

这样,正常的命令提示屏幕就会打开。现在我想要压缩/隐藏命令提示符窗口(黑色)。我找到了一个地方,如果我从命令中删除了start属性,它就不会出现,但是当从命令中删除它时,命令不会执行,也不会显示异常。

任何人都可以告诉我如何压制这个窗口吗?

8 个答案:

答案 0 :(得分:5)

您是否尝试过“开始”的B选项?

proc = Runtime.getRuntime().exec("cmd /c start /B somebat.bat");

修改
好吧,Anish,你的代码没有被执行,这很有趣 我设置了一个单元测试:

Process proc = null;
    try
    {
        proc = Runtime.getRuntime().exec("cmd /c start /B D:\\temp\\_test\\somebat.bat");
        proc = Runtime.getRuntime().exec("cmd /c call D:\\temp\\_test\\somebat.bat");
        proc = Runtime.getRuntime().exec("D:\\temp\\_test\\somebat.bat");
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我的somebat.bat文件如下所示:

rem somebat.bat:
d:
cd D:\temp\_test
copy somebat.bat somebat2.bat

上面的try-block中的所有三个版本都适用于我的场景。 Somebat.bat被复制到somebat2.bat而没有弹出命令窗口(如果我使用你的电话会发生什么,如你的问题所示)。

编辑2:下一轮;-)
Anish,你能告诉我们你的somebat.bat和你的蚂蚁文件是什么样的吗? 因为以下三个调用都适用于我的场景:

测试代码:

Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start /B c:\\temp\\_test\\somebat.bat");
proc = Runtime.getRuntime().exec("cmd /c call c:\\temp\\_test\\somebat.bat");
proc = Runtime.getRuntime().exec("c:\\temp\\_test\\somebat.bat");

somebat.bat:

cd\temp\_test  
ant mycopy  

build.xml:

<?xml version="1.0"?>
<project name="testproj" default="mycopy" basedir=".">
  <target name="mycopy">
      <copy file="myfile.txt" tofile="mycopy.txt" />
  </target>
</project>

myfile.txt:任意文本文件

答案 1 :(得分:2)

Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start C:\temp\somebat.bat");

答案 2 :(得分:1)

添加/Q

Runtime.getRuntime().exec( "cmd /c /Q start somebat.bat");

答案 3 :(得分:1)

您可以使用“run”而不是“start”。

Runtime.getRuntime().exec("cmd /c run somebat.bat");

答案 4 :(得分:0)

你试过吗

start /min "title" "c:\path\batchfile.bat"

这将运行没有窗口的批处理文件。然而,它仍会出现在任务栏中(因为它被最小化)

答案 5 :(得分:0)

看看这个forum post。其中一个答案建议使用vbs script隐藏窗口。

答案 6 :(得分:0)

试试这个:

  

Runtime.getRuntime()。exec(cmd.exe / K C:/path/batchfile.bat);

答案 7 :(得分:-2)

我不太了解Windows,但我建议你省略命令的“cmd”位。 cmd.exe是Windows终端。只是一个猜测。查找其他exec()方法,有一个方法可以运行命令可执行文件和参数。至少在UNIX上,你通常不能做任何shell不支持的事情(比如将输出传递给文件),因为这些是shell功能而不是被调用程序完成。可能是为什么你发现如果删除cmd前缀,有些东西不起作用。

尝试:

Process proc = Runtime.getRuntime().exec("somebat.bat");