繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM