一部のTomcatを停止するJavaプログラムからバッチファイルを開始しています。コマンドラインから開始すると、バッチ自体が機能します。しかし、Javaから起動しても機能しません。問題は、バッチが保存されているフォルダーから呼び出されないことです。したがって、いくつかのファイルを見つけることができません。私の質問は、バッチが存在するフォルダーに切り替えてバッチを開始し、そのフォルダーから実行して必要なファイルを見つける方法です。
たとえば、バッチはフォルダー c:\foobar\mybatch.cmd にあります。
これが私のコードで、現在バッチがJavaからどのように呼び出されるかです
public void startBatch(Path batchPath) {
if (batchPath == null) {
throw new IllegalArgumentException("cannot start batch without path to it");
}
if (!Files.exists(batchPath)){
throw new IllegalArgumentException("batch does not exist " + batchPath.toString());
}
try {
log.info("starting batch " + batchPath.toAbsolutePath().toString());
String command = "cmd.exe /c " + batchPath.toAbsolutePath().toString();
Process p;
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = reader.readLine();
while (line != null) {
log.info(line);
line = reader.readLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
}