视窗批处理及;java:将-XX:OnOutOfMemoryError命令和批处理参数组合在一起

视窗批处理及;java:将-XX:OnOutOfMemoryError命令和批处理参数组合在一起,java,windows,batch-file,parameters,Java,Windows,Batch File,Parameters,我对Windows批处理编程一无所知。 我想要实现的是为Java应用程序编写一个启动脚本。然而,它并不启动Java应用程序,而是打印出来 用法:java[-options]类[args…] (执行一个类) 或java[-options]-jar jarfile[args…] (执行jar文件) 这表明我的参数无法正确识别 以下是我对不工作脚本的建议: set memory=600000 java -XX:OnOutOfMemoryError="taskkill /PID %p&qu

我对Windows批处理编程一无所知。 我想要实现的是为Java应用程序编写一个启动脚本。然而,它并不启动Java应用程序,而是打印出来

用法:java[-options]类[args…]

(执行一个类)

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

(执行jar文件)

这表明我的参数无法正确识别


以下是我对不工作脚本的建议:

set memory=600000
java -XX:OnOutOfMemoryError="taskkill /PID %p" -Xmx%memory%K -jar MyApp.jar
在实际场景中,计算
内存
,以设置应用程序的最佳最大堆大小


省略这两个参数中的一个将启动应用程序。所以

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


可以工作,但我需要两个参数才能在一个调用中工作。

如果在脚本中打开
@echo
和关闭
@echo
,则可以看到实际执行的命令

您说生成的命令是:

java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar
这使得它看起来像是
%p
%
被视为替代的“开口”
%

除了引号不平衡外,这意味着您实际上没有给
java
一个运行命令-
-jar MyApp.jar
实际上在
-XX:onAutofmemoryError
字符串中

尝试将单个
%%
替换为
%%
——根据,这就是如何在BAT文件中写入文本
%%

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

尝试在脚本()中启用
@echo
/
@echo off
,然后查看在“两个参数”的情况下它实际执行的命令。感谢您的输入!在上使用
@echo会导致打印
java-XX:onAutofmemoryError=“taskkill/PID memoryK-jar MyApp.jar
,这表明
中存在错误,不再关闭,参数也没有添加(
%memory%)
…看起来发生的事情是
%p
中的
%
被认为是替代的“开口”
%
-我认为
%
是单个
%
的标记(就像
printf
类似方法中的那样)。我刚刚写了一条评论,这解决了问题!ONAUTOFMEMORYERROR参数中的第一个
%%
必须使用
%%
进行转义。谢谢没问题。请考虑接受这个答案:“不,我不会!”开个玩笑,我得等几分钟才能做到:P
java -XX:OnOutOfMemoryError="taskkill /PID %%p" -Xmx%memory%K -jar MyApp.jar