java bat 批处理_如何从java执行批处理文件?

我想从Java程序中执行批处理文件。

我使用以下命令。

Runtime.getRuntime().exec("server.bat");

但问题是,我想给出一个替代路径,而不是绝对路径,以便在任何COMP上部署Java项目。

项目的DIR结构如下:

com

|

project

|

------ parser

|         |_____ Main.java

|

-------util

|_____ Server.bat

我想从"分析器"DIR中的"Mudi.java"文件中运行"UTIL"DIR文件中的"Server .BAT"文件。

您可以使用ProcessBuilder进行此操作。它比exec提供更多的控制。特别是,它允许使用方法directory设置工作目录。

例子:

ProcessBuilder pb = new ProcessBuilder("server.bat");

pb.directory(new File(deployDir +"\\com\\project\\util"));

Process p = pb.start();

int exitStatus = p.waitFor();

当然,你的应用程序必须从某个地方得到部署。它可以在环境中设置,在应用程序配置文件中,它可以是当前用户目录或任何其他目录。

不适合我不知道为什么

您必须使用参数"/c"和"server.bat"运行"cmd.exe":

Runtime.getRuntime().exec(new String[] {"cmd.exe","/c","server.bat" } );

当Java运行时,您使用RunTime.Excor()使用相对路径,相对于当前用户指向的相对手段,调用JVM。

这可能起作用

Runtime.getRuntime().exec("cmd.exe","/c","./com/projct/util/server.bat");

如果从COM的父目录启动Java。

或者必须计算绝对路径:

Runtime.getRuntime().exec("cmd.exe","/c",

System.getProperty("user.dir")+"/com/projct/util/server.bat");

我忘记了,当runtime.exec()不需要时读取。

运行时类中没有采用三个字符串参数的"exec"方法。

那是真的。我指的是字符串[]版本,但我不能在so文本框中输入方括号…我想我必须阅读手册/维基…

假设我有三个命令应该从cmd运行,然后将为每个命令打开三个单独的cmd窗口,是否有一种方法可以在一个cmd窗口上执行所有三个命令。

@viveksinghggits请阅读:stackoverflow.com/questions/8055371/…

如果支持的话,可以用桌面试试它(Java 1.6)

File file = new File("server.bat");

Desktop.getDesktop().open(file);

对我来说真的很新鲜。

exec的第二个参数是环境设置的参数字符串[](空表示继承进程的当前参数),exec的第三个参数应该是提供工作目录的文件。试试这个:

Runtime.getRuntime().exec("cmd /c server.bat", null, new File("./com/project/util"));

最好是将应用程序的安装目录存储在系统上,然后使用该目录在应用程序中构建路径。system.getproperty("user.dir")应该在Windows和Unix平台上工作以获取当前的工作目录,但它依赖于系统,因此请注意这一点。

Plexus utils提供了一个命令行类型,可以调用任意命令行并处理输出的解析。

Commandline cl = new Commandline();

cl.setExecutable("cmd.exe" );

cl.createArg().setValue("/c" );

cl.setWorkingDirectory( new File(System.getProperty("user.dir"),

"/com/project/util/Server.bat"));

cl.createArg().setValue("/c" );

StreamConsumer consumer = new StreamConsumer() {

public void consumeLine( String line ) {

//do something with the line

}

};

StreamConsumer stderr = new StreamConsumer() {

public void consumeLine( String line ) {

//do something with the line

}

};

int exitCode;

try {

exitCode = CommandLineUtils.execute( cl, consumer, stderr, getLogger() );

} catch ( CommandLineException ex ) {

//handle exception

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值