我使用批处理文件-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
帮助表示赞赏。
谢谢!
答案 0 :(得分:1)
正如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
。有关批量变量字符串操作的更多信息,请参阅this page。
答案 1 :(得分:0)
在批处理脚本中尝试以下内容(在检查了这些命令行参数是否实际传递之后):
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