2013-09-30 12 views
5

Java実行ファイルから別のディレクトリにあるバッチファイルを実行しようとしています。Javaコードからバッチファイルを実行する

try { 
     Process p = Runtime.getRuntime().exec("cmd /c start \"C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert\\upsert.bat\"") ;   
    } catch (IOException ex) { 
    } 

結果は、プログラムは、プログラムが実行された時にルートディレクトリにCMDウィンドウを開き、私は提供されたファイルパスにアクセスしていないということです:私は、次のコードを持っています。

+0

を言うなら私のために働いている、以下の "スタート/?"コマンドプロンプトウィンドウから、 'start'コマンドのオプションを記述します。 "/ D "オプションが役立つ場合があります。 – ajb

答えて

20

むしろよりRuntime.exec(String command)、あなたはexec(String command, String[] envp, File dir)メソッドのシグネチャを使用する必要があります。

Process p = Runtime.getRuntime().exec("cmd /c upsert.bat", null, new File("C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert")); 

しかし、個人的に、私はもう少し冗長けどRuntime.exec()よりもはるかに使いやすく、デバッグしている、代わりにProcessBuilderを使用すると思います。

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "upsert.bat"); 
File dir = new File("C:/Program Files/salesforce.com/Data Loader/cliq_process/upsert"); 
pb.directory(dir); 
Process p = pb.start(); 
+1

Dirは以前に含まれていたのと同じパスですか? – Ricardo

+0

ProcessBuilderを使用している場合は、引用符は必要ありません。 – MadProgrammer

+0

( "\" @リカルド解明してくれてありがとう。私は何の仮定もしていなかった。私はそれが少しシンプルなので、答えを更新します。 – rob

6

試し以下

try { 
      String[] command = {"cmd.exe", "/C", "Start", "D:\\test.bat"}; 
      Process p = Runtime.getRuntime().exec(command);   
     } catch (IOException ex) { 
     } 
+4

私は何かを見逃しているかもしれないので早いですが、これはOPがやっていることとどのように違うのですか?特定の場所でバッチファイルを実行する必要があります – MadProgrammer

2

あなたのコードは大丈夫ですが、問題は、バッチファイル内にあります。

batファイルの内容を表示する必要があります。問題はbatファイル内のパスにあります。

0
import java.lang.Runtime; 

Process run = Runtime.getRuntime().exec("cmd.exe", "/c", "Start", "path of the bat file"); 

これはあなたのために機能し、使いやすいです。

1

あなたは

File dir = new File("E:\\test"); 
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "Start","test.bat"); 
     pb.directory(dir); 
     Process p = pb.start(); 
関連する問題