2017-12-14 8 views
0

私はバッチファイルを実行するJava Webサービスを持っています。私はコントローラクラスを終了しました。コントローラクラスにはパラメータがあり、変数はString fileNameです。私はfileNameがその機能を実行するようにコードする方法がわかりません。Javaの必要な機能を実行するURLのパラメータをリンクする

私はコードを表示し、fileNameの予定について説明します。

RunBatchFile.java

public ResultFormat runBatch(String fileName) { 

    String var = fileName; 
    String filePath = ("C:/Users/attsuap1/Desktop" + var); 
    try { 
     Process p = Runtime.getRuntime().exec(filePath); 

     int exitVal = p.waitFor(); 

     return new ResultFormat(exitVal == 0); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return new ResultFormat(false); 
    } 
} 

URLとしてhttp://localhost:8080/runbatchfileparam/test.batにおけるユーザーの種類は、TEST.BATファイルを実行する必要がありますBatchFileController.java

private static final String template = "Sum, %s!"; 

@RequestMapping("/runbatchfileparam/{param}") 
public ResultFormat runbatchFile(@PathVariable("param") String fileName) { 
    RunBatchFile rbf = new RunBatchFile(); 
    return rbf.runBatch(fileName); 
} 

。ユーザーがtest.batではなくtest123.batを入力すると、test123.batchファイルを実行する必要があります。したがって、私は文字列filePathを"C:/Users/attsuap1/Desktop/test.bat"にすることはできませんが、test.batファイルを実行するようになります。私は、ユーザーが実行したいバッチファイルを選択できるようにしたい。私はこれが達成するのは簡単だと思うが、私はそれをどうやって行うかについてはわからない。

String fileName変数をリンクすると、どのように実行されるのですか?私はいくつかの方法を試みたが、彼らは私が望む結果を出していない。

ありがとうございました。ありがとうございました。

+0

fileName' 'の値は、セパレータ(' \ 'や'/')で始めていますか?そうでない場合は、名前をパスに連結して「Desktoptest.bat」を取得します。 –

+0

私はそれを望んでいません。どのように私はそれを変更する必要があります –

+0

私はfileNameを実行するバッチファイルを選択できるようにするパラメータにするだけです。今私は2つのバッチファイル(test.batとtest123.bat)があります。 test.batファイルを直接実行するので、 'C:/ Users/attsuap1/Desktop/test.bat'のようにコード化したくないので、パラメータを持つ必要はありません –

答えて

1

あなたは既にここで仕事をしていると思います。

目的のバッチファイルを実行するには2通りの方法があります。

  1. いけないがURLのparamで ".BAT" を含む、 はむしろあなたが 例えばPARAMに入るものは何でもファイルに、あなたのrunBatch()メソッドでの.batを追加します

    public ResultFormat runBatch(String fileName) { 
    
    String var = fileName; 
    String filePath = ("C:/Users/attsuap1/Desktop/" + var+".bat"); 
    try { 
        Process p = Runtime.getRuntime().exec(filePath); 
    
  2. しかし、あなたはあなたのURLでの.batを含めたいならば、あなたはその春がドット末尾のファイル名を無視しないように、以下の正規表現のマッピングを使用する必要があります。

    @RequestMapping("/runbatchfileparam/{param:.+}") 
    public ResultFormat runbatchFile(@PathVariable("param") String fileName) 
    { 
    RunBatchFile rbf = new RunBatchFile(); 
    return rbf.runBatch(fileName); 
    } 
    
+0

私は病気を助けてくれてありがとうございました –

+0

バッチファイルは実行されていません。私が最初の方法を使用する場合、URLに '.bat'なしで' http:// localhost:8080/runbatchfileparam/test123'と入力するだけです。私はそれを試みたが、依然としてバッチファイルは実行されなかった –

+1

どのようなエラーが見られましたか?私はあなたの の文字列filePath =( "C:/ Users/attsuap1/Desktop" のデスクトップの後に " " – TruckDriver

関連する問題