0

重複の可能性:
Javaアプリケーションからバッチファイルを実行するにはどうすればよいですか?

Windowsバッチファイルを実行するためのJavaクラスはありますか?たとえば、バッチファイルを開始し、バッチ実行の結果を受け取りますか?

4

5 に答える 5

1

ApacheCommonsExecは良い方法です。純粋なProcessBuilderまたはRuntime.execを使用する場合に発生するいくつかの問題を解決します。

プロジェクトの説明から:

Javaから外部プロセスを実行することは、よく知られている問題領域です。これは本質的にプラットフォームに依存し、開発者はプラットフォーム固有の動作を知ってテストする必要があります。たとえば、Windowsでcmd.exeを使用したり、デッドロックの原因となるバッファサイズが制限されたりします。これに対するJREのサポートは非​​常に制限されていますが、新しいJava SE1.5ProcessBuilderクラスの方が優れています。

于 2012-10-24T15:30:10.103 に答える
0

通常のProcessBuilderものは、バッチファイルで機能しRuntime#execます。実行しているコマンドはです。cmd.exeバッチファイル名はその引数です。引数の順序は、、、だとcmd.exe思い/cますbatch_file_name(編集:うん、そして実際、私はここでこの質問がSOで重複しているという質問を見つけました。それは答えの中にあります。)

于 2012-10-24T15:28:33.220 に答える
0

Runtime.getRuntime().exec("cmd /c start batFileName.bat");動作するはずです。ただし、Javaプロセスからの出力を読み取るにはstart、上記のコマンドから削除します。

于 2012-10-24T15:29:39.323 に答える
0

はい、私の知識によれば、RunTimeクラスはできます。そしてもちろん、ProcessBuilderもそのようです。Javaを使用して多数のバッチファイルを実行しました。以下はグーグル検索結果です。同様に重要なリンクがあります

グーグルの結果

于 2012-10-24T15:30:23.147 に答える
0

ネイティブJavaを使用し、サードパーティパッケージを使用しない場合は、とを使用してこれを試してRuntimeくださいProcess。私は世界で最高のJavaコーダーではありませんが、これで必要なものが得られるはずです。入力ストリームからすべてを読み取るためのループを追加するには、いくつかの変更が必要になる場合があります。

import java.util.*;
import java.lang.*;
import java.io.*;

public class test
{
    public static void main(String args[])
    {
        try
        {
            Runtime rt = Runtime.getRuntime();
            Process batch = rt.exec("test.bat");

            batch.waitFor();

            //exitValue() contains the ERRORLEVEL from batch file
            System.out.println(batch.exitValue());

            //getInputStream will get all output from stdout
            //getErrorStream will get all error output from stderr
            InputStream inStream = batch.getInputStream();
            byte[] text = new byte[inStream.available()];
            inStream.read(text);

            System.out.println(new String(text));
        }
        catch (IOException ex)
        {
        }
        catch (InterruptedException ex)
        {
        }
    }
}
于 2012-10-24T15:46:02.943 に答える