Lotus教程、Java教程、Java虚拟机、Java软件综合开发社区

Lotus、Domino、Java、C#、Web、数据库综合开发教程、资料社区

java调用批处理文件实例代码分析



Published by admin on 03月 11, 2008

方法1:考虑将批处理转换为exe可执行文件。然后再通过Java调用可执行文件;

Java JDK里已经提供了调用的方法,不在累赘,代码如下。
  
  
  try {
  String command = “notepad”;
  Process child =
  Runtime.getRuntime().exec(command);
  } catch (IOException e)
  {
  
  }
准备工作:
Quick Batch File (De)Compiler,可以将任何BAT、CMD批处理脚本编译为EXE文件。使用了一下,果然可以。
  
  Quick Batch File (De)Compiler使用非常简单:
  
  Quickbfc 文件名.bat 文件名.exe(将批处理命令编译为可执行文件)
  
  quickbfd 文件名.exe 文件名.bat(将可执行文件反编译为批处理命令)
  
  然后,我们再按第一种方法通过Java 调用,即可。

方法2:直接调用批处理文件
代码实例:
Runtime.getRuntime().exec(”cmd /c start batoracle.bat”);
注意:batoracle.bat路径跟cmd.exe路径一致即可;

BeanSoft 的实践备注:
因为我要实现调用其他目录里面的 BAT 文件, 具体说就是 Tomcat 的 startup.bat 文件, 目前可以证明的是如果程序启动目录位于 Tomcat 的 bin 目录下, 调用批处理文件没有问题, 而如果不在那个目录来调用 startup.bat, 那么就算使用 Quick Batch File (De)Compiler 也不能正常运行 BAT, 原因就是当前路径不对. OK, 问题集中在如何设置当前路径下了.
我们看看批处理环境的 start 的用法:

start /?
启动另一个窗口运行指定的程序或命令。

START [”title”] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]

“title” 在窗口标题栏中显示的标题。
path 起始目录
B 在不创建新窗口的情况下开始应用程序。 除非
启动 ^C 处理,否则该应用程序会忽略 ^C 处理;
^Break 是唯一可以中断该应用程序的方式
I 新环境是传递给 cmd.exe 的原始环境,
而不是当前环境
MIN 开始时窗口最小化
MAX 开始时窗口最大化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
SHARED 在分共享的空间内开始 16 位 Windows 程序
LOW 在 IDLE 优先级类别开始应用程序
NORMAL 在 NORMAL 优先级类别开始应用程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
ABOVENORMAL 在 ABOVENORMAL 优先级类别开始应用程序
BELOWNORMAL 在 BELOWNORMAL 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
command/program
如果是内部 cmd 命令或批文件,那么该命令处理器是
用 /K 命令行开关运行 cmd.exe 的。这表示该窗口在命令运行
后仍然存在。

如果不是内部 cmd 命令或批文件,则是一个程序,并
作为窗口应用程序或控制台应用程序运行。

parameters 这些为传送到命令/程序的参数

如果命令扩展名被启用,通过命令行或 START 命令的外部命令
调用会如下改变:

将文件名作为命令键入,非可执行文件 可以通过文件关联调用。
(例如, WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。
关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和
FTYPE 命令。

执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用
程序终止就返回命令提示。如果在命令脚本内执行,该新行为
则不会发生。

如果执行的命令行的第一个符号是不带扩展名或路径修饰符的
字符串 “CMD”,”CMD” 会被COMSPEC 变量的数值所替换。这
防止从当前目录抓出 CMD.EXE。

如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用
PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展
名。PATHEXT 变量的默认值是:

.COM;.EXE;.BAT;.CMD

请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

查找可执行文件时,如果没有相配的扩展名,看一看该名称是否
与目录名相配。如果确实如此,START 会在那个路径上调用
Explorer。如果从命令行执行,则等同于对那个路径作 CD /D。

可以看到 /Dpath 选项可以指定当前目录下运行, 所以最后通过运行的命令语句就是:
cmd /c start /D”D:\Tomcat5.0\bin\” startup.bat, OK, 问题成功解决.

代码:

/**/ /*
* @(#)TestRun.java 1.00 2005-7-21
*
* Copyright 2006 beansoft@126.com. All rights reserved.
* PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/

/** */ /**
* TestRun, 测试执行批处理文件.
* @author BeanSoft
* @version 1.00 2005-7-21
*/
public class TestRun {

public static void main(String[] args) {
try {
Runtime.getRuntime().exec( ” cmd /c start /D\ ” D:\\Tomcat5. 0 \\bin\\\ ” startup.bat ” );
} catch (Exception e) {
e.printStackTrace();
}
}
}



【版权说明】:本网页上有部分内容来源于网上收集,但不能保证资料的完整性和准确性,仅提供参考和学习。如有侵权请立即通知我们,我们将立即删除,谢谢合作!

Add A Comment