【发布时间】:2016-03-14 14:10:51
【问题描述】:
我对 Windows 批处理编程完全陌生。 我想要实现的是为Java应用程序编写一个启动脚本。然而,它并没有启动 Java 应用程序,而是打印出来
用法:java [-options] 类 [args...]
(执行一个类)
或java [-options] -jar jarfile [args...]
(执行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
有效,但我需要两个参数才能在一次调用中工作。
【问题讨论】:
-
尝试将
@echo on/@echo off放入您的脚本 (described here) 中,看看它在“两个参数”情况下实际执行的命令。 -
感谢您的意见!使用
@echo on导致打印java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar,这表明"有错误,不再关闭,参数没有添加(%memory%)... -
看起来正在发生的事情是
%p中的%被认为是替换的“开口”%- 我认为%%是单个@987654337 的标记@(就像在printf-like 方法中一样)。
标签: java windows batch-file parameters