2012-03-05 8 views
9

からVBSファイルを実行しているので、私はこれを試してみましたが、運を持つ:は、私が<code>C:/work/selenium/chrome/</code>でVBSファイルTest.vbsというを持っていると私は私のJavaプログラムから実行するJava

public void test() throws InterruptedException { 
    Runtime rt = Runtime.getRuntime(); 
    try { 
     Runtime.getRuntime().exec("C:/work/selenium/chrome/test.vbs"); 
    } 
    catch(IOException e) { 
     e.printStackTrace(); 
    } 
} 

私がしようとした場合私はVBSファイルを実行しようとすると、それは "有効なwin32アプリケーションではない"と言うこのメソッドでいくつかのexeファイルを実行します。

JavaからVBSファイルを実行する方法はありますか?

+2

明らかにあなたのケースでは、このコマンドの実行方法はわかりません。 cscript C:\\ work \\ selenium \\ chrome \\ test.vbs – NiranjanBhat

答えて

2

vbs-Scriptは、bat、cmd、またはexe-Programのようにネイティブに実行可能ではありません。あなたは(?vbs.exe)インタプリタを起動し、パラメータとしてスクリプトを引き渡す必要があります:Send_Mail_updated.vbsは私のVBSファイルの名前です

String script = "C:\\work\\selenium\\chrome\\test.vbs"; 
// search for real path: 
String executable = "C:\\windows\\...\\vbs.exe"; 
String cmdArr [] = {executable, script}; 
Runtime.getRuntime().exec (cmdArr); 
10
public static void main(String[] args) { 
    try { 
     Runtime.getRuntime().exec("wscript D:/Send_Mail_updated.vbs"); 
    } 
    catch(IOException e) { 
     System.out.println(e); 
     System.exit(0); 
    } 
} 

これが正常に動作している

2
Runtime.getRuntime().exec("cscript E:/Send_Mail_updated.vbs") 
-1

ここでは完全なコード

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
public class VBTest { 
    public static void main(String[] args) { 
     try { 
      String line; 
      OutputStream stdin = null; 
      InputStream stderr = null; 
      InputStream stdout = null; 
      Process process = Runtime.getRuntime().exec("cscript E:/Send_Mail_updated.vbs"); 
      stdin = process.getOutputStream(); 
      stderr = process.getErrorStream(); 
      stdout = process.getInputStream(); 

       // "write" the parms into stdin 
       line = "param1" + "\n"; 
       stdin.write(line.getBytes()); 
       stdin.flush(); 

       line = "param2" + "\n"; 
       stdin.write(line.getBytes()); 
       stdin.flush(); 

       line = "param3" + "\n"; 
       stdin.write(line.getBytes()); 
       stdin.flush(); 

       stdin.close(); 

       // clean up if any output in stdout 
       BufferedReader brCleanUp = new BufferedReader (new InputStreamReader (stdout)); 
       while ((line = brCleanUp.readLine()) != null) { 
       System.out.println ("[Stdout] " + line); 
       } 
       brCleanUp.close(); 

       // clean up if any output in stderr 
       brCleanUp = 
       new BufferedReader (new InputStreamReader (stderr)); 
       while ((line = brCleanUp.readLine()) != null) { 
       System.out.println ("[Stderr] " + line); 
       } 
       brCleanUp.close(); 
      } 
      catch(IOException e) { 
       System.out.println(e); 
       //System.exit(0); 
      } 
    } 
} 
+0

stdoutとstderrを読み取るコードはデッドロックする可能性があります。これを正しくコーディングするには、別々のスレッドを使用してプロセスの出力ストリームを読み取る必要があります – aeropapa17

0
try { 
     Runtime.getRuntime().exec(new String[] { 
     "wscript.exe", "C:\\path\\example.vbs" 
     });   
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

上記のコードを使ってvbsファイルを実行することができます。

関連する問題