bat文件不在Java中执行

时间:2013-11-05 09:02:10

标签: java batch-file

我已经编写了一些用于执行.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电话,我只能看到内容。

4 个答案:

答案 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?