我已经编写了一些用于执行.bat
文件的代码。其中包含一些
像设置java classpath,etc
这样的命令..最后有一个命令
它运行一个Java类文件.H elloWorld class
转换一些xml文件并在某个文件夹中生成一个新的xml文件。当我双击.bat文件时,它执行正常,
但是当我试图跑步时,我没有得到任何输出,因为我正在通过
双击.bat
文件。如何批处理执行,可能会很好
如果我能通过Java控制台看到结果。
以下是执行.bat文件的MyJava代码
public void run2() {
try {
String []commands = {"cmd.exe","/C","C:/MyWork/Java/classes/run.bat"} ;
Process p = Runtime.getRuntime().exec(commands);
BufferedReader in = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
低于一些已设置为.bat文件的命令
set CLASSPATH=%CLASSPATH%;C:/MyWork/Java
set CLASSPATH=%CLASSPATH%;C:/MyWork/Java/classes
java -cp test.jar;test2.jar test.HelloWorld
也与"/C"
commad一起尝试过。它不会执行。实际上它不会双击.bat
文件。还有其他方法我可以尝试吗?
我可以通过Eclipse控制台看到.bat
文件中的内容。但它没有提供所需的输出。期望的输出意味着当我双击.bat
文件时,它执行得很好。但通过java
电话,我只能看到内容。
答案 0 :(得分:2)
使用cmd.exe时,使用/C
- 参数传递命令:
String []commands = {"cmd.exe","/C","C:/MyWork/Java/classes/run.bat"} ;
答案 1 :(得分:1)
根据this,Windows CMD需要/c
参数来执行这样的命令。试试这个:
String []commands = {"cmd.exe","/c","C:/MyWork/Java/classes/run.bat"} ;
答案 2 :(得分:0)
Windows对Windows和MS-DOS路径分隔符使用 \ backslash 。在java.io
包中,Java接受正斜杠/并将其转换为路径分隔符,但不能直接被Windows接受或被cmd.exe
shell接受。
您可能还需要为要执行的批处理文件指定工作目录,或者可能需要为cmd.exe
命令解释程序指定完整路径
请参阅:Runtime.exec (String[] cmdarray, String[] envp, File dir)
String[] commands = {"C:\\Windows\\System32\\cmd.exe", "/c",
"C:\\MyWork\\Java\\classes\\run.bat"};
File workDir = new File( "C:/MyWork");
Process process = Runtime.getRuntime().exec( commands, null, workDir);
要验证批处理文件是否完全运行,请在批处理文件中添加pause
命令。这将保持窗口打开,以便您可以验证批处理文件是否完全启动,并逐步调试。
答案 3 :(得分:0)
您没有读取批处理文件的错误输出,因此,您永远不会看到从那里或从CMD.EXE本身打印的任何错误消息。此外,子程序可能会停止并等待您读取错误流。
请在此处查看相关讨论:How to make a java program to print both out.println() and err.println() statements?