3

.batファイルを実行するためのコードをいくつか書きました。java の設定などのコマンドがいくつか含まれていますclasspath,etc。最後に、Java クラス ファイルを実行するコマンドが 1 つあります。H は、elloWorld classいくつかの xml ファイルを変換し、いくつかのフォルダーに新しい xml ファイルを生成します。.bat ファイルをダブルクリックすると正常に実行されますが、実行しようとすると、ファイルをダブルクリックして取得していたため、出力が得られません.bat。バッチを実行する方法と、Java コンソールで結果を確認できればよいのですが。

以下は、.bat ファイルを実行する MyJava コードです。

public void run2() {
        try {
            String []commands = {"cmd.exe","/C","C:/MyWork/Java/classes/run.bat"} ;
            Process p = Runtime.getRuntime().exec(commands);
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    p.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

そして、.batファイルに設定されているいくつかのコマンドの下

set CLASSPATH=%CLASSPATH%;C:/MyWork/Java
set CLASSPATH=%CLASSPATH%;C:/MyWork/Java/classes
java -cp test.jar;test2.jar test.HelloWorld

コマンドでも試しまし"/C"た。実行されません。実際には、ファイルをダブルクリックしても効果はありません.bat。私が試すことができる他の方法はありますか?

.batEclipse コンソールからファイル内の内容を確認できます。しかし、それは望ましい出力を与えません。望ましい出力とは、ファイルをダブルクリック.batすると、うまく実行されることを意味します。でもjava 通話では中身しか見えない。

4

4 に答える 4

2

cmd.exe を使用する場合は、/C-Parameter を使用してコマンドを渡します。

String []commands = {"cmd.exe","/C","C:/MyWork/Java/classes/run.bat"} ;
于 2013-11-05T09:07:54.187 に答える
1

thisによると、この/cようなコマンドを実行するには、Windows CMD に引数が必要です。これを試して:

String []commands = {"cmd.exe","/c","C:/MyWork/Java/classes/run.bat"} ;
于 2013-11-05T09:08:44.457 に答える
0

バッチ ファイルのエラー出力を読み取らないため、バッチ ファイルや CMD.EXE 自体からエラー メッセージが出力されることはありません。さらに、サブプログラムが停止し、エラー ストリームを読み取るのを待つだけになる場合があります。

ここで関連する議論を参照してください: out.println() ステートメントと err.println() ステートメントの両方を印刷する Java プログラムを作成する方法は?

于 2013-11-05T11:39:26.850 に答える
0

Windows では、Windows および MS-DOS のパス区切り文字に\ バックスラッシュを使用します。スラッシュ / はパッケージ内の Java によって受け入れられ、パス区切り文字に変換されますが、Windows やシェルjava.ioによって直接受け入れられることはありません。cmd.exe

また、実行するバッチ ファイルの作業ディレクトリ、または場合によってはコマンド インタープリターへのフル パスを指定する必要がある場合もあります。cmd.exe

見る: Runtime.exec (String[] cmdarray, String[] envp, File dir)

String[] commands = {"C:\\Windows\\System32\\cmd.exe", "/c", 
    "C:\\MyWork\\Java\\classes\\run.bat"};
File workDir = new File( "C:/MyWork");
Process process = Runtime.getRuntime().exec( commands, null, workDir);

pauseバッチ ファイルが実行されたかどうかを確認するには、コマンドをバッチ ファイルに追加します。これにより、ウィンドウが開いたままになるため、バッチ ファイルが起動されたかどうかを確認し、段階ごとにデバッグできます。

于 2013-11-05T09:42:03.413 に答える