需要帮助从Windows批处理文件运行我的Java .jar文件

时间:2018-02-22 17:59:28

标签: java batch-file jar

我有一个位于以下位置的Java jar文件:

C:\Users\myusername\bin\MyDir\MyApp.jar

我还有一些必需的属性文件(需要作为.jar文件的输入参数)与.jar文件位于同一目录中。

我在这里创建了一个runme.bat文件:

C:\Users\myusername\Desktop\runme.bat

runme.bat文件中,这就是我所拥有的:

setlocal
set JAVA_HOME="C:\Program Files\Java\jdk1.8.0_161\bin\"
set PATH=C:\Users\myusername\bin\MyDir\
start %JAVA_HOME%javaw -jar %PATH%MyApp.jar %PATH%propertiesfile.properties

但是,每当我尝试运行.bat文件时,都会收到错误:

Windows cannot find '-jar' Make sure you typed the name correctly, and then try again.

在命令行上,我看到Windows尝试执行此操作:

> "C:\Program Files\Java\jdk1.8.0_161\bin\"javaw -jar C:\Users\myusername\bin\MyDir\MyApp.jar ...

从命令行运行时出现此错误。如果我只是双击.bat文件,就会出现一个cmd窗口并快速消失。

那么,我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

在set命令周围使用双引号,而不是在变量内部。

此外,我认为没有理由使用START命令,除非您希望在第二个命令提示符中启动Java后在原始命令提示符中的批处理文件中执行更多操作。可能但似乎不太可能。

通常,您只需输入可执行文件或使用CALL,以便可执行文件运行并在达到结论后返回批处理。

此外,您将系统路径变量更改为java文件的路径,这将使会话变得非常棘手。值得庆幸的是,这应该仅存在于打开的命令窗口和原始窗口生成的窗口中,因此请将它们全部关闭,然后为路径使用不同的变量名称。

所以我会用两种方式,使用Call,并使用start。

以下是使用call:

的代码
@(
    setlocal
    ECHO ON
)

set "_Title=Runnning My Java"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_161\bin"
set "_MyJarPath=C:\Users\%UserName%\bin\MyDir"

TITLE "%_Title%"
CD /D "%JAVA_HOME%"
CALL "%JAVA_HOME%\javaw.exe" -jar "%_MyJarPath%\MyApp.jar" "%_MyJarPath%\propertiesfile.properties"

(
    ENDLOCAL
    EXIT /B 0
)

以下是使用start命令的代码:

@(
    SETLOCAL
    ECHO ON
)

set "_Title=Runnning My Java"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_161\bin"
set "_MyJarPath=C:\Users\%UserName%\bin\MyDir"

start "%_Title%" /D "%JAVA_HOME%" "%JAVA_HOME%\javaw.exe" -jar "%_MyJarPath%\MyApp.jar" "%_MyJarPath%propertiesfile.properties"

(
    ENDLOCAL
    EXIT /B 0
)