1

Java プログラムからバッチ ファイルを実行しようとしています。例:「Program Files」のフォルダーにバッチ「abc.bat」があります。

Java プログラムからこのバッチを実行したいと考えています。CommandLine クラス、Commons-exec jar を使用しています。

CommandLine cmdLine = CommandLine.parse("cmd");
cmdLine.addArgument("/c start \"\" \"C:\\Program Files\\abc.bat\"");

DefaultExecutor exec = new DefaultExecutor();
Process p = Runtime.getRuntime().exec(cmdLine.toString());
exec.execute(cmdLine);

上記のコードは、「Windows はファイルを見つけることができません。名前を正しく入力したことを確認してから、もう一度やり直してください」というエラーをスローします。そして、それはパスにスペースがあるためです。

だから、@ brso05がここで提供した答えを試してみましたが、うまくいきました。しかし、私はそれをFuture Classにしたいと思っています。以下のコードを見つけて、修正を手伝ってください。

final CommandLine cmdLine = CommandLine.parse("cmd.exe");
cmdLine.addArgument("/c");
cmdLine.addArgument("start");
cmdLine.addArgument("\""+ batchFileExecute.getParent().toString() + "\"");

ExecutorService es = Executors.newFixedThreadPool(1);
Future<?> future = es.submit(new Runnable() {
        public void run() {
                DefaultExecutor exec = new DefaultExecutor();
                        try {
                            Process p = Runtime.getRuntime().exec(cmdLine.toString());
                            exec.execute(cmdLine);
                            System.out.println(p.waitFor());
                            }
                        catch (IOException e) 
                            {
                                e.printStackTrace();
                            }
                        catch (InterruptedException e)
                            {
                                e.printStackTrace();
                            }
                        }
                        });
                            String thread_status = null;
                            try 
                            {
                                thread_status = future.get().toString(); 
                                System.out.println(thread_status+" completed the execution");
                            } 
                            catch (NullPointerException e) 
                            {
                            System.out.println("The execution of the received project is     complete.");                   
// In here I want to do some processing again.
}

私が言及したコードは機能しますが、バッチ ファイルのパスにスペースが含まれていると機能しません。これを修正するのを手伝ってもらえますか?

あなたが与えたスニペットは機能しますが、それをFutureに入れることはできません。希望どおりに機能しません。

前もって感謝します!

4

3 に答える 3

1

これは別の方法です。

     Runtime rt = Runtime.getRuntime();
     rt.exec("cmd.exe /c start \"\" \"C:\\Program Files\\abc.bat\"");
于 2014-11-25T14:57:53.543 に答える