2016-03-14 17 views
5

私はWindowsのバッチプログラミングに全く新しいです。 私が達成したいのは、Javaアプリケーションの起動スクリプトを書くことです。 [...引数]Windowsバッチ&java:-XX:OnOutOfMemoryErrorコマンドとバッチパラメータを組み合わせる

(クラスを実行する)

またはJavaをJavaの[-options]クラス:しかし、それは、Javaアプリケーションを起動せず、むしろ

使用法を出力します[-options] -jar jarファイル[引数...]

(jarファイルを実行する)

...

は、自分のパラメータが正しく認識されないことを示します。ここで


は、動作していないスクリプトのための私のMCVEです:本当のシナリオでは

set memory=600000 
java -XX:OnOutOfMemoryError="taskkill /PID %p" -Xmx%memory%K -jar MyApp.jar 

memoryは、アプリケーションに最適な最大ヒープサイズを設定するように計算されます。


両方のパラメータのいずれかを外しておくと、アプリが起動します。だから、

java -XX:OnOutOfMemoryError="taskkill /PID %p" -jar MyApp.jar 

set memory=600000 
java -Xmx%memory%K -jar MyApp.jar 

作品が、私は両方のパラメータは、1回の呼び出しで作業する必要があります。

+0

@echo on'の/ '@は、あなたにoff'エコー'入れてみてくださいscript([here here](http://stackoverflow.com/a/10237457/3788176)を参照してください))、実際に "両方のパラメータ"の場合にどのコマンドが実行されているかを確認してください。 –

+0

入力いただきありがとうございます! '@echo on'を使うと、' '-XX:OnOutOfMemoryError =" taskkill/PID memoryK -jar MyApp.jar'という印が表示されます。これはもはや閉じていない '' 'と何らかの間違いを示します。追加されていない( '%memory%)' ... –

+2

'%p'の'% 'は置換のために' '%' 'とみなされているようです - ' %% 'は単一の'% 'のトークンです(' printf'のようなメソッド)。 –

答えて

2

@echo on@echo offをスクリプトに挿入すると、実際に実行されているコマンドがわかります。

あなたは結果のコマンドがあると言う:%p%は、置換のために、「開口部」%検討されているように見えます

java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar 

二重引用符とは別に、javaにコマンドを実行しないことを意味します。-jar MyApp.jarは実際に-XX:OnOutOfMemoryError文字列の中にあります。

%%で単一%を交換してみてください - this questionによると、それはBATファイルでリテラル%を記述する方法です:

java -XX:OnOutOfMemoryError="taskkill /PID %%p" -Xmx%memory%K -jar MyApp.jar 
+0

私はちょうどコメントを書いている、これは問題を解決する! OnOutOfMemoryErrorパラメータ内の最初の '%'は '%% 'でエスケープしなければなりませんでした。ありがとう! –

+0

問題ありません。答えを受け入れることを検討してください:) –

+2

いいえ私はしません!ちょうど冗談、私はそれを行うことができます前に、数分待つ必要があります:P –

関連する問題