我正在使用 Java 代码执行批处理文件。代码如下:
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start somebat.bat");
这样,正常的命令提示符屏幕就会打开。现在我想抑制/隐藏命令提示符窗口(黑色的)。我在某处发现,如果我从命令中删除 start 属性,它不会出现,但是从命令中删除它时,命令不会执行,也不会显示任何异常。
任何人都可以告诉我如何抑制这个窗口吗?
我正在使用 Java 代码执行批处理文件。代码如下:
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start somebat.bat");
这样,正常的命令提示符屏幕就会打开。现在我想抑制/隐藏命令提示符窗口(黑色的)。我在某处发现,如果我从命令中删除 start 属性,它不会出现,但是从命令中删除它时,命令不会执行,也不会显示任何异常。
任何人都可以告诉我如何抑制这个窗口吗?
你试过“开始”的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:任意文本文件
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start C:\temp\somebat.bat");
You can use "run" instead of "start".
Runtime.getRuntime().exec("cmd /c run somebat.bat");
你有没有尝试过
start /min "title" "c:\path\batchfile.bat"
这将在没有窗口的情况下运行您的批处理文件。但是,它仍会出现在任务栏中(因为它已最小化)
Try this:
Runtime.getRuntime().exec(cmd.exe /K C:/path/batchfile.bat);
我不太了解windows,但我建议你省略命令的“cmd”位。cmd.exe 是 Windows 终端。只是一个猜测。查找其他 exec() 方法,其中有一个需要运行命令可执行文件和参数。至少在 UNIX 上,您通常不能执行 shell 不支持的任何操作(例如将输出通过管道传输到文件),因为这些是 shell 功能,而不是由被调用程序完成的。可能是您发现如果删除 cmd 前缀有些事情不起作用的原因。
试试:
Process proc = Runtime.getRuntime().exec("somebat.bat");