バッチ ファイルの終了コードと結果の環境をキャプチャできるソリューションが必要です。これは、システム環境とバッチ内で設定された変数を取得する必要があることを意味します。
よりよく理解するために、ここに私が思いついたものがあります。残念ながら、printEnvironment() メソッドは、以前にバッチで設定された変数 MyVar を出力せず、システム変数のみを出力します。バッチファイル自体を変更せずに「MyVar」をキャプチャする方法はありますか?
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
class Main{
public static void main(String[] args){
String command = "C:/temp/varTest.bat";
MyTask mt = new MyTask(command);
mt.run();
}
}
class MyTask implements Runnable{
private ProcessBuilder pb;
private Process process;
private int exitCode;
private Map<String, String> env;
private String command;
public MyTask(String command){
this.command = command;
}
public void run(){
try {
pb = new ProcessBuilder(command);
process = pb.start();
process.waitFor();
exitCode = process.exitValue();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("Execution finished! Exit code: " + exitCode);
printEnvironment();
process.destroy();
}
}
private void printEnvironment(){
env = pb.environment();
List<String> envKeys = new ArrayList<String>(env.keySet());
Collections.sort(envKeys);
for(String key : envKeys){
System.out.println(key+" ==> "+env.get(key));
}
}
}
バッチ ファイル コード:
set MyVar=VAL