如何识别 java 中是否执行了批处理文件?

how to recognize batch file is executed or not in java?

我正在尝试使用以下代码在 java 中执行我的批处理文件

String Extraction="cmd.exe /c start C:\task\Extracting.bat "; 
Runtime.getRuntime().exec(Extraction);

System.out.println("Extracted...");

这里,我想在执行完批处理文件后执行打印语句。 但是如果运行上面的代码,它首先打开命令提示符和运行s批处理文件,然后突然执行批处理文件运行s之前的打印语句。帮我解决这个问题。

使用我的新代码从 Java 应用程序 运行 该命令,我们首先构建然后执行命令,如下所示:

// build my command as a list of strings
List<String> command = new ArrayList<String>();
command.add("ls");
command.add("-l");
command.add("/var/tmp");

// execute my command
SystemCommandExecutor commandExecutor = new SystemCommandExecutor(command);
int result = commandExecutor.executeCommand();

// get the output from the command
StringBuilder stdout = commandExecutor.getStandardOutputFromCommand();
StringBuilder stderr = commandExecutor.getStandardErrorFromCommand();

// print the output from the command
System.out.println("STDOUT");
System.out.println(stdout);
System.out.println("STDERR");
System.out.println(stderr);

资源Link:

  1. Java exec - 使用 Java ProcessBuilder 和执行系统进程 过程(第 1 部分)
  2. Java exec - 使用 Java ProcessBuilder 和执行系统进程 过程(第 2 部分)

Retrieving Details About Batch Jobs

提交批处理作业时,批处理 运行 时间会创建一个 JobExecution 实例来跟踪它。 JobExecution 有获取作业开始时间、作业完成时间、作业退出状态等各种详细信息的方法。要获取执行 ID 的 JobExecution,您可以使用 JobOperator.getJobExecution(executionId) 方法。

package javax.batch.runtime;
public interface JobExecution {
    long getExecutionId();
    java.lang.String getJobName();
    javax.batch.runtime.BatchStatus getBatchStatus();
    java.util.Date getStartTime();
    java.util.Date getEndTime();
    java.lang.String getExitStatus();
    java.util.Date getCreateTime();
    java.util.Date getLastUpdatedTime();
    java.util.Properties getJobParameters();
}

还有一点值得一试。它等待执行

String Extraction="cmd.exe /c start C:\task\Extracting.bat "; 
//Runtime.getRuntime().exec(Extraction);

final Process p = new ProcessBuilder("cmd.exe", "/c", "start /WAIT C:\task\Extracting.bat").redirectErrorStream(true).start();
p.waitFor();
System.out.println("Job done!!");

这里java的作用是调用cmd,然后OS执行写在批处理文件中的指令:

您可以查看以下代码:进程句柄将由 exec 方法return编辑。 通过使用 waitFor() 它等待子进程完成,然后 returns 退出代码。 只有路径有问题才return1,否则成功则为0。

public class TestMe2 {

public static void main(String[] args) {
    Process p=null;
    String Extraction="cmd.exe /c start C:\hello.bat "; 
    try {
        p=Runtime.getRuntime().exec(Extraction);
        System.out.println(p.waitFor());
    } catch (Exception er) {
        er.printStackTrace();
    }finally{
    }       
}

}