• ベストアンサー

Javaプログラムからバッチ起動

Runtimeクラスを使用し、バッチファイルをJavaプログラム内で呼び出す処理を実装しました。Javaにより呼び出されるバッチファイル(X.bat)は、他の2つのバッチファイル(A.bat、B.bat)を呼び出すようにプログラムされています。ここで質問なのですが、実際にこのJavaプログラムを実行しX.batを呼び出し、最終的にA.bat、B.batが呼ばれているかどうかの確認をしたところ、どうもB.batが呼ばれずにA.bat終了後、処理が終了してしまっているなのですが、この原因についてご教授いただきたく質問いたしました。

  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • galoon
  • ベストアンサー率28% (38/133)
回答No.3

おそらくX.batの記述に誤りがあるのだと思います。 バッチファイルから他のバッチファイルの起動を行い、その後制御を返させるには、ただバッチファイル名を指定するのではいけなかったと思います。 <X.batの内容> A.bat B.bat であるならば次のように修正してください。 <X.batの内容> call A.bat call B.bat callを付けないとA.batの処理後にX.batの処理も終了してしまうのです。

その他の回答 (2)

  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.2

Runtimeクラスを使い回していませんか? Runtime rt = new Runtime(); rt.exec("A.bat"); rt.exec("B.bat"); という様にRuntimeクラスを使い回すと、うまく動かないです。 Runtime rt1 = new Runtime(); Runtime rt2 = new Runtime(); rt1.exec("A.bat"); rt2.exec("B.bat"); という様に、Runtimeクラスのインスタンスを分ければ良いです。

noname#14768
noname#14768
回答No.1

これだけでは情報が少なすぎて何とも言えません。 原因として考えられるのは、 1.パスの問題。呼び出すバッチの相対パス 2.X.batの不具合 でしょうね。

関連するQ&A

  • スレッドについて

    JAVAでプログラムを書く上で、Aという処理が終了次第、Bという処理を実行したい場合どうすればいいのでしょうか? ///////////////////////////////////////////////////////////////// 例えば、 ・ファイルにデータを出力する。(例えば、バッチファイルhoge.batとして) その後、すぐに ・そのバッチファイルを実行する命令を書く(Runtime.exec(hoge.bat); ///////////////////////////////////////////////////////////////// このプログラムを実行した場合、スレッドAがファイルにデータを出力し終わる前に勝手にスレッドBが作られ、Runtime.exec(hoge.bat);が実行されてしまいます。正しくスレッドAが終了し終わった後にスレッドBが実行し始めるようにするにはどうすればいいのでしょうか?教えてください。お願いします。

    • ベストアンサー
    • Java
  • javaプログラミングにおけるバッチファイル起動

    JavaのプログラムからNetbeansを用いてバッチファイルを起動させることを考えています。 以下のようにプログラムを作成したところ、コマンドプロンプトの画面は表示されるのですが、バッチファイルの中身が起動されません。 どのようにしたらよろしいかお知恵を拝借願います。 public class Open_JTalk { private Process p; private void start() { try { //String command = "cmd.exe /c start"; String command = "cmd.exe /c start lib/open_jtalk/m001_106.bat"; p = Runtime.getRuntime().exec(command); } catch (Exception e) { } } public static void main(String args[]) { Open_JTalk jtalk = new Open_JTalk(); jtalk.start(); } } バッチファイルを動かすのみの処理で、 String command = "lib/open_jtalk/m001_106.bat"; とした場合は何も処理されずにプログラムが終了してしまいます。 また、バッチファイルはlib/open_jtalk/に配置済みです。 ディレクトリのbatファイルをクリックで動かした場合には正常に起動しています。 どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • Javaからのバッチ起動に関して

    現在ファイル整理用のプログラムを作っています。 その中でJavaのRuntimeクラスにおけるexecメソッドを使い move *ファイル名* 移動後ディレクトリ という内容のバッチファイルにテキストフィールドから取得したファイル名を渡し カットアンドペーストを行おうと思ったのですが、 この処理だとマッチする条件のファイル量が多いときに途中で何故か止まります。 バッチファイルの内容をコマンドプロンプトから実行するとちゃんと全てのファイル操作が終わるまで動くのですが、原因は何なのでしょうか? 一応、下にその処理をしている部分のコードを書いておきます。 private class ButtonAction implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("ファイル移動")) { String str=text.getText(); if(str.equals(""))System.out.println("入力してください"); else { Runtime rt=Runtime.getRuntime(); JFileChooser fc=new JFileChooser("D:/Video"); fc.addActionListener(new FileAction()); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.showOpenDialog(null); if(isok){ try{ rt.exec("C:\\Users\\yuki\\Desktop\\move.bat "+str+" "+path); }catch(Exception err) { err.printStackTrace(); } } } バッチファイルの中身 C: cd "C:\録画" move *%1* %2

    • ベストアンサー
    • Java
  • バッチ起動したいのですが…

    javaからバッチを起動したいのですが、以下の記述ではうまくいきません。動作として、具体的には、バッチからあるプログラムを起動し、for文によって、プロンプトがエンドレスに表示され続けるという動作をするはずなのですが、エラーは出ないのにうまくできません。ただし、バッチから起動するプログラムのファイルを、同じjavaのワーキングディレクトリに入れるとうまく動作します。ただ、この方法だと、融通が利かないし、ディレクトリがごちゃごちゃしてしまうので、使えません。 自分の中では、パスの問題なのだろうかと思うのですが、どうすればうまくいくのでしょうか? try { Process p = Runtime.getRuntime().exec("C:\\10\\UI.bat"); } catch (IOException ex) { System.out.println("erorr"); ex.printStackTrace(); }

  • バッチファイルで他のバッチファイルを呼び出した後、元に戻ってこれない。

    バッチファイルで他のバッチファイルを呼び出した後、元に戻ってこれない。 バッチファイルでほかのバッチファイルを呼び出した後の処理で困っています。 どうぞ教えてください。 「A.bat」というバッチファイルを実行すると、「1.bat」というバッチファイルを 実行させ、「1.bat」の実行結果によって、処理を分岐させたいと考えています。 「1.bat」をcallで呼び出し、実行はできたのですが、「1.bat」は最後にエンタキーを 押さないと終了しないようになっています。そのため、「エンターキーを押して終了させて ください」というメッセージが出たままの画面で終わってしまい、「A.bat」に帰ってくることが できません。 「1.bat」は中身を扱えないようにしてあるバッチファイルなので、こちらでエンターキーを 押さずに終了させるようにはできません。何かいい方法はないでしょうか?

  • バッチファイルの起動

    JAVAで特定のファルダにあるバッチファイル(拡張子:.bat)を起動させることって可能なのでしょうか? 行いたいのは、WEBの画面上からボタンをクリックして、バッチファイルを起動させる処理です。 可能であれば、どのような方法で出来るのでしょうか?

    • ベストアンサー
    • Java
  • プログラムを終了させるバッチファイル?

    ベクターなどでダウンロードしたプログラムを終了させるバッチファイルとか作れるものですか。 ダウンロードしたプログラムは、単にEXEファイルをクリックして実行しているだけです。 例 owari.bat をクリックするとすでに実行しているプログラムを終了させる。

  • バッチファイルを1個だけしか起動しないようにしたい

    エクスプローラー上から バッチファイル(test.bat)を ダブルクリックしてバッチファイルを実行しています。 通常はコマンドプロンプトが1個だけ表示されて、 バッチファイルが実行して実行が終了すると コマンドプロンプトも閉じられます。 しかし、時々、 コマンドプロンプトが2個表示されることがあります。 つまり、ダブルクリックが、 1回ではなく2回実行されたと誤認識されて、 同じバッチファイル(test.bat)が 2つ起動してしまったと思われます。 当然、その後の処理はおかしくなります。 (バッチファイル(test.bat)の中に 何らかのコードを追加するなどして) 必ず1個だけしか起動しないようにすることは、 できないでしょうか。 (Windows10)

  • javaからバッチファイル実行

    お世話になります。 javaプログラムからバッチファイルを呼び出して実行するようにしたいのですが、上手くいきません。 サイトを参考に以下のように書いてみましたが、 バッチファイルの一行目のみ実行している?ようで、二行目以降の処理をしていないようです。 バッチファイル単体での実行は正常に動作しています。 お気づきの点がありましたら教えて頂けないでしょうか。 try { String[] cmd = {"バッチファイルのパス"}; Process p = Runtime.getRuntime().exec(cmd); while(true){ try{ p.exitValue(); }catch(IllegalThreadStateException e){ continue; } break; } } catch (IOException e) { e.printStackTrace(); }

    • ベストアンサー
    • Java
  • バッチファイルについて

    あるバッチファイルがあります。 そのバッチファイル内では、AとBというバッチが 呼び出されているとします。 このときのAおよびBの処理開始・終了時刻を ログとしてとりたいのですが、どのように記述 すればよいのでしょうか?教えてください。 あいまいな質問で申し訳ないですが よろしくお願いします。