从批处理文件中运行带有多个参数的jar

时间:2017-11-22 12:25:30

标签: java batch-file jar

以下是我尝试运行ObjectMapper om = new ObjectMapper(); Data data = om.readValue(input, Data.class);

的批处理文件中的代码段
myProgram.jar

批处理文件使用set /p _count="enter count: " set /p _toc="enter TOC" choice /N /C:TO /M "Select Type(T/O): " if errorlevel ==1 set _type=T if errorlevel ==2 set _type=O choice /N /C:SF /M "Select status(S/F): " if errorlevel ==1 set _status=T if errorlevel ==2 set _status=O java -jar dir/myProgram.jar %_count% %_type% %_status% %_toc% java -jar_count_type四个参数执行_status命令。

我只在java中获得_toc_count的值。

问题是剩下的两个参数是作为_toc值传递的,因此每次运行程序时我都面临null

2 个答案:

答案 0 :(得分:0)

来自CHOICE/?

When you use ERRORLEVEL parameters in a batch program, list them in decreasing order.

这意味着您使用以下语法:

If ErrorLevel 2 Set "_type=O"
If ErrorLevel 1 Set "_type=T"

如果您愿意,常用的替代方法是使用%ERRORLEVEL%代替:

If "%ErrorLevel%"=="1" Set "_status=T"
If "%ErrorLevel%"=="2" Set "_status=O"

答案 1 :(得分:0)

TL;博士

您的错误无法复制,我很确定它会导致简单的印刷错误,或者您的Java App中没有向我们展示。

我执行了以下操作来重现您的行为:

1。创建一个简单的Java App,将args写入控制台:

import java.util.Arrays;

class App {
    public static void main(String[] args) {
        Arrays.stream(args).forEach(System.out::println);
    }
}

2。在Windows 10上使用jdk1.8.0_91进行编译。

javac .\App.java
jar cvfe App.jar App *.class

3。使用上面的代码执行test.bat :(仅适用于编辑问题的情况)

set /p _count="enter count: "
set /p _toc="enter TOC"

choice /N /C:TO /M "Select Type(T/O): "
if errorlevel ==1 set _type=T
if errorlevel ==2 set _type=O

choice /N /C:SF /M "Select status(S/F): "
if errorlevel ==1 set _status=T
if errorlevel ==2 set _status=O

java -jar App.jar %_count% %_type% %_status% %_toc%

使用输入:5, 6, T, F,它提供了以下输出:

  

5
    Ť
    Ø
    6

这意味着 - 恕我直言 - 你的错误存在于获取args的java代码中,NullPointerExceptionSystem.Console()引发而不是args[n],或者您发布的批处理代码不是确切地说,它是如何在您的计算机上执行的。

总结一下:如果您的批处理使用4个参数调用命令行(例如您的示例代码),args有4个参数。