批处理文件的命令行选项(Java应用程序)

时间:2014-12-23 14:30:37

标签: java windows batch-file cmd

我使用批处理文件-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

帮助表示赞赏。

谢谢!

2 个答案:

答案 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