5

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

Process proc = null;

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

这样,正常的命令提示符屏幕就会打开。现在我想抑制/隐藏命令提示符窗口(黑色的)。我在某处发现,如果我从命令中删除 start 属性,它不会出现,但是从命令中删除它时,命令不会执行,也不会显示任何异常。

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

4

7 回答 7

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 和你的 ant 文件是什么样子吗?
因为下面的所有三个调用都适用于我的场景:

测试代码:

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  

构建.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:任意文本文件

于 2009-06-15T10:51:42.400 回答
2
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start C:\temp\somebat.bat");
于 2012-10-23T11:05:30.220 回答
1

You can use "run" instead of "start".

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

于 2013-11-18T12:09:20.490 回答
0

你有没有尝试过

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

这将在没有窗口的情况下运行您的批处理文件。但是,它仍会出现在任务栏中(因为它已最小化)

于 2009-06-15T10:13:13.723 回答
0

看看这个论坛帖子。答案之一建议使用vbs 脚本来隐藏窗口。

于 2009-06-15T10:30:09.750 回答
0

Try this:

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

于 2011-02-02T18:40:31.030 回答
-2

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

试试:

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

于 2009-06-15T10:02:28.303 回答