我正在使用Java代码执行批处理文件。代码如下:
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start somebat.bat");
这样,正常的命令提示屏幕就会打开。现在我想要压缩/隐藏命令提示符窗口(黑色)。我找到了一个地方,如果我从命令中删除了start属性,它就不会出现,但是当从命令中删除它时,命令不会执行,也不会显示异常。
任何人都可以告诉我如何压制这个窗口吗?
答案 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");