[英]Command line options to batch file (Java application)
我有一个使用批处理文件start.bat运行的Java应用程序
批处理文件:
@echo off
rem (
set JAVA_HOME=.\jre7
rem echo %JAVA_HOME%
java.exe -jar app-0.0.1-SNAPSHOT.jar
rem )
清单文件的类名称具有public static main(String[] args)
方法,这是应用程序的起点。
我通过键入start.bat在命令提示符下运行该应用程序
现在,我需要为这个bat文件提供命令行参数,该文件可以被main方法接收。
因此,任务是将命令行参数传递给批处理文件,然后将这些参数发送给java类main方法。
我正在探索apache cli库,但不确定是否可以帮助我。
基本上,这应该是输入:
start.bat -a
:如果-a
存在,则在Java应用程序中执行任务A
start.bat -b
:如果-b
存在,则在Java应用程序中执行任务B
start.bat -a -b
:执行任务A和B
帮助表示赞赏。
谢谢 !
正如上面的user882813所指出的,最简单的解决方案是,如果您希望.bat
文件接受与.jar
文件相同的开关,只需将%*
(包含所有参数的批处理变量)附加到Java命令中,如下所示:
java.exe jar app-0.0.1-SNAPSHOT.jar %*
如果您的.jar
文件由于某种原因不能接受相同的开关,则可以使用这种方法在批处理脚本中编写翻译脚本。 如果检查%*
是否存在-a
和-b
,则可以适当地构造Java启动命令。 即使开关是反向的,这也应该起作用(例如start.bat -b -a
)。
@echo off
setlocal
set "JAVA_HOME=.\jre7"
set a=& set b=& set "args=%*"
if "%*" neq "" (
if "%args%" neq "%args:-a=%" set "a=1"
if "%args%" neq "%args:-b=%" set "b=1"
)
if defined a (
if defined b (
rem :: Do both A and B
set "cmdArgs=/ABswitch"
) else (
rem :: Do work A
set "cmdArgs=/Aswitch"
)
) else if defined b (
rem :: Do work B
set "cmdArgs=/Bswitch"
) else (
rem :: Do no work
set cmdArgs=
)
java.exe -jar app-0.0.1-SNAPSHOT.jar %cmdArgs%
关于if "%args%" neq "%args:-a=%" set "a=1"
的简要说明:这通过变量子字符串替换来实现。 基本上, %args:-a=%
是%args%
其中-a
替换为空。 因此,如果%args%
与-a
删除不相同,则它必须包含-a
。 因此,设置a=1
。 有关批处理变量字符串操作的更多信息,请参见此页面 。
在批处理脚本中尝试以下操作(在检查是否确实传递了这些命令行参数之后):
IF "%1" == "-a" GOTO DOWORKA
IF "%2" == "-b" GOTO DOWORKB
//as a third meassure , check for both -a and -b and invoke :DOWORKAB label
:DOWORKA
//invoke java program with param a
:DOWORKB
//invoke java program with param b
:DOWORKAB
//invoke java program with param a and b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.