我正在使用Java代码执行批处理文件.代码如下:
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start somebat.bat");
Run Code Online (Sandbox Code Playgroud)
这样,正常的命令提示屏幕就会打开.现在我想要压缩/隐藏命令提示符窗口(黑色).我找到了某个地方,如果我从命令中删除了start属性,它就不会出现,但是当从命令中删除它时,命令不会执行,也不会显示异常.
任何人都能告诉我如何压制这个窗口吗?
你试过"开始"的B选项吗?
proc = Runtime.getRuntime().exec("cmd /c start /B somebat.bat");
Run Code Online (Sandbox Code Playgroud)
编辑:
好的,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();
}
Run Code Online (Sandbox Code Playgroud)
我的somebat.bat文件如下所示:
rem somebat.bat:
d:
cd D:\temp\_test
copy somebat.bat somebat2.bat
Run Code Online (Sandbox Code Playgroud)
上面的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");
Run Code Online (Sandbox Code Playgroud)
somebat.bat:
cd\temp\_test
ant mycopy
Run Code Online (Sandbox Code Playgroud)
build.xml文件:
<?xml version="1.0"?>
<project name="testproj" default="mycopy" basedir=".">
<target name="mycopy">
<copy file="myfile.txt" tofile="mycopy.txt" />
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
myfile.txt:任意文本文件
gub*_*bby -2
我不太了解windows,但我建议你省略命令中的“cmd”位。cmd.exe 是 Windows 终端。只是一个猜测。查找其他 exec() 方法,有一个方法需要运行命令可执行文件和参数。至少在 UNIX 上,您通常不能执行 shell 不支持的任何操作(例如将输出通过管道传输到文件),因为这些是 shell 功能,而不是由被调用的程序完成的。可能就是为什么您发现如果删除 cmd 前缀,某些功能将不起作用。
尝试一下:
Process proc = Runtime.getRuntime().exec("somebat.bat");