Windows批处理和java:组合-XX:OnOutOfMemoryError命令和批处理参数

Mar*_*ger 5 java windows parameters batch-file

我是Windows批处理编程的新手.我想要实现的是为Java应用程序编写启动脚本.然而,它并没有启动Java应用程序,而是打印出来

用法:java [-options] class [args ...]

(执行课程)

或java [-options] -jar jarfile [args ...]

(执行jar文件)

...

这表示我的参数未被正确识别.


这是我的MCVE for not-working script:

set memory=600000
java -XX:OnOutOfMemoryError="taskkill /PID %p" -Xmx%memory%K -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)

在实际场景中,memory计算为应用程序设置最佳最大堆大小.


省略其中一个参数会使应用程序启动.所以

java -XX:OnOutOfMemoryError="taskkill /PID %p" -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)

set memory=600000
java -Xmx%memory%K -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)

工作,但我需要两个参数在一个调用中工作.

And*_*ner 2

如果将@echo on和放入@echo off脚本中,您可以看到实际执行的命令。

你说生成的命令是:

java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)

这使得%of看起来像是%p被认为是%替换的“开头”。

除了引号不平衡之外,这意味着您实际上没有给出java运行命令 --jar MyApp.jar实际上是在字符串内部-XX:OnOutOfMemoryError

尝试将单个替换%%%- 根据这个问题,这就是如何%在 BAT 文件中写入文字:

java -XX:OnOutOfMemoryError="taskkill /PID %%p" -Xmx%memory%K -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)

  • 不,我不会!开个玩笑,只需等几分钟我就能做到这一点:P (2认同)