对 运行 个 jar 文件的实用建议
suggestion to run jar files in practical way
我有一个要 运行 的 jar 文件,但我想以更实用的方式 运行 而不提及 "java" 或 "java -cp blah blah"
目前,我需要 运行 我的 jar 文件使用“java -cp \MyProgram.jar [arguments]
但是,我不想 运行 我的程序使用这样的命令。我想我需要创建批处理文件或命令文件来调用我的 java 程序?或者还有其他更熟练的方法来 运行 jar 文件吗?
谢谢
编码良好的批处理文件是 运行 用户轻松 Java 应用程序的良好解决方案。
这是一个带有一些注释行的示例:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
title MyProgram
if "%~1" == "/?" goto ShowHelp
rem Try to find java.exe in current folder or any folder defined in
rem environment variable PATH as Windows command interpreter would do.
set "SearchPath=%CD%;%PATH%"
set "SearchPath=%SearchPath:)=^)%"
set "SearchPath=%SearchPath:\;=;%"
for /F "delims=" %%I in ('echo %SearchPath:;=^&ECHO %') do (
if exist "%%~I\java.exe" (
set "JavaPath=%%~I"
goto RunMyProgram
)
)
echo %~dpn0
echo.
echo Error: Failed to find java.exe in current folder or
echo any folder defined in environment variable PATH.
:GetJavaPath
echo.
echo Please enter path to folder with java.exe.
echo.
echo Enter nothing to exit if Java is not installed at all.
echo.
set "JavaPath="
set /P "JavaPath=Path to java.exe: "
rem Has the user entered a folder path at all?
if "!JavaPath!" == "" goto BatchExit
rem Remove all double quotes from entered folder path.
set "JavaPath=!JavaPath:"=!"
rem Replace all / by \ in entered folder path.
set "JavaPath=!JavaPath:/=\!"
rem If there is a backslash at end, remove this backslash.
if "!JavaPath:~-1!" == "\" set "JavaPath=!JavaPath:~0,-1!"
rem Does java.exe exist in entered folder path?
if exist "!JavaPath!\java.exe" goto RunMyProgram
echo.
echo There is no java.exe in entered folder.
goto GetJavaPath
:ShowHelp
echo For using this application ...
echo.
pause
goto BatchExit
:RunMyProgram
echo.
"%JavaPath%\java.exe" -cp "%~dp0MyProgram.jar" %*
:BatchExit
endlocal
整个批处理代码使用由 setlocal 和 endlocal 定义的自己的环境。阅读 change directory command cd ..not working in batch file after npm install 上的答案,详细了解这两个命令的作用。
第三行定义了控制台应用程序的标题,应将其编辑为您认为适合您的 Java 应用程序的任何内容。
在 Windows 上获取有关命令或控制台应用程序帮助的标准参数是 运行 使用 /?
作为参数。因此,批处理代码检查第一个参数是否等于 /?
,在这种情况下,输出一个帮助,您必须在标签 ShowHelp
.
下为您的应用程序编写
接下来,批处理文件会在当前目录和环境变量PATH
中定义的所有目录中搜索java.exe
。预计可以自动找到 Java 可执行文件,因此您的 Java 应用程序接下来可以在没有任何用户交互的情况下执行。此代码部分是 Magoo in his answer on Find the path used by the command line when calling an executable.
编写的代码的略微修改版本
但如果无法自动找到java.exe
,则输出带有完整路径的批处理文件的名称,让用户知道哪个应用程序正在打印错误消息,以及接下来的错误消息。
用户现在可以手动输入或通过将路径拖放到包含 java.exe
.
的文件夹
只需按 RETURN 或 ENTER 用户就可以退出批处理文件,以防识别出 Java 根本没有安装,因此该用户无法使用您的 Java 应用程序。
否则可能会从输入的文件夹路径中删除双引号,正斜杠被反斜杠替换,因为许多用户在 Windows 上错误地使用 /
而不是 \
,最后如果文件夹路径以反斜杠结尾,输入的文件夹路径的字符也会被删除。
下一步验证java.exe
是否真的存在于用户输入的文件夹中
注意:如果用户输入例如"\"
,环境变量JavaPath
在文件存在性检查时不再存在,但确实如此不是很重要。使用延迟扩展引用输入的文件夹路径,以防止由于语法错误退出批处理文件处理,以防用户在输入文件夹路径时输入错误,这将导致语法错误中的变量立即扩展。
此批处理文件预期 MyProgram.jar
与批处理文件本身位于同一目录中。 %~dp0
引用批处理文件的驱动器和路径。此字符串始终以反斜杠结尾,这就是 %~dp0
和 MyProgram.jar
.
之间没有反斜杠的原因
%~dp0MyProgram.jar
用双引号引起来,因为用户可能已将您的 Java 应用程序和批处理文件提取到名称或路径包含 1 个或更多空格的文件夹中。
%*
引用传递给批处理文件的所有参数(参数、选项),以将它们转发给您的 Java 应用程序。
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
call /?
... 解释 %~1
、%~dp0
、%dpn0
和 %*
echo /?
endlocal /?
for /?
goto /?
if /?
pause /?
rem /?
set /?
setlocal /?
title /?
我有一个要 运行 的 jar 文件,但我想以更实用的方式 运行 而不提及 "java" 或 "java -cp blah blah"
目前,我需要 运行 我的 jar 文件使用“java -cp \MyProgram.jar [arguments]
但是,我不想 运行 我的程序使用这样的命令。我想我需要创建批处理文件或命令文件来调用我的 java 程序?或者还有其他更熟练的方法来 运行 jar 文件吗?
谢谢
编码良好的批处理文件是 运行 用户轻松 Java 应用程序的良好解决方案。
这是一个带有一些注释行的示例:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
title MyProgram
if "%~1" == "/?" goto ShowHelp
rem Try to find java.exe in current folder or any folder defined in
rem environment variable PATH as Windows command interpreter would do.
set "SearchPath=%CD%;%PATH%"
set "SearchPath=%SearchPath:)=^)%"
set "SearchPath=%SearchPath:\;=;%"
for /F "delims=" %%I in ('echo %SearchPath:;=^&ECHO %') do (
if exist "%%~I\java.exe" (
set "JavaPath=%%~I"
goto RunMyProgram
)
)
echo %~dpn0
echo.
echo Error: Failed to find java.exe in current folder or
echo any folder defined in environment variable PATH.
:GetJavaPath
echo.
echo Please enter path to folder with java.exe.
echo.
echo Enter nothing to exit if Java is not installed at all.
echo.
set "JavaPath="
set /P "JavaPath=Path to java.exe: "
rem Has the user entered a folder path at all?
if "!JavaPath!" == "" goto BatchExit
rem Remove all double quotes from entered folder path.
set "JavaPath=!JavaPath:"=!"
rem Replace all / by \ in entered folder path.
set "JavaPath=!JavaPath:/=\!"
rem If there is a backslash at end, remove this backslash.
if "!JavaPath:~-1!" == "\" set "JavaPath=!JavaPath:~0,-1!"
rem Does java.exe exist in entered folder path?
if exist "!JavaPath!\java.exe" goto RunMyProgram
echo.
echo There is no java.exe in entered folder.
goto GetJavaPath
:ShowHelp
echo For using this application ...
echo.
pause
goto BatchExit
:RunMyProgram
echo.
"%JavaPath%\java.exe" -cp "%~dp0MyProgram.jar" %*
:BatchExit
endlocal
整个批处理代码使用由 setlocal 和 endlocal 定义的自己的环境。阅读 change directory command cd ..not working in batch file after npm install 上的答案,详细了解这两个命令的作用。
第三行定义了控制台应用程序的标题,应将其编辑为您认为适合您的 Java 应用程序的任何内容。
在 Windows 上获取有关命令或控制台应用程序帮助的标准参数是 运行 使用 /?
作为参数。因此,批处理代码检查第一个参数是否等于 /?
,在这种情况下,输出一个帮助,您必须在标签 ShowHelp
.
接下来,批处理文件会在当前目录和环境变量PATH
中定义的所有目录中搜索java.exe
。预计可以自动找到 Java 可执行文件,因此您的 Java 应用程序接下来可以在没有任何用户交互的情况下执行。此代码部分是 Magoo in his answer on Find the path used by the command line when calling an executable.
但如果无法自动找到java.exe
,则输出带有完整路径的批处理文件的名称,让用户知道哪个应用程序正在打印错误消息,以及接下来的错误消息。
用户现在可以手动输入或通过将路径拖放到包含 java.exe
.
只需按 RETURN 或 ENTER 用户就可以退出批处理文件,以防识别出 Java 根本没有安装,因此该用户无法使用您的 Java 应用程序。
否则可能会从输入的文件夹路径中删除双引号,正斜杠被反斜杠替换,因为许多用户在 Windows 上错误地使用 /
而不是 \
,最后如果文件夹路径以反斜杠结尾,输入的文件夹路径的字符也会被删除。
下一步验证java.exe
是否真的存在于用户输入的文件夹中
注意:如果用户输入例如"\"
,环境变量JavaPath
在文件存在性检查时不再存在,但确实如此不是很重要。使用延迟扩展引用输入的文件夹路径,以防止由于语法错误退出批处理文件处理,以防用户在输入文件夹路径时输入错误,这将导致语法错误中的变量立即扩展。
此批处理文件预期 MyProgram.jar
与批处理文件本身位于同一目录中。 %~dp0
引用批处理文件的驱动器和路径。此字符串始终以反斜杠结尾,这就是 %~dp0
和 MyProgram.jar
.
%~dp0MyProgram.jar
用双引号引起来,因为用户可能已将您的 Java 应用程序和批处理文件提取到名称或路径包含 1 个或更多空格的文件夹中。
%*
引用传递给批处理文件的所有参数(参数、选项),以将它们转发给您的 Java 应用程序。
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
call /?
... 解释%~1
、%~dp0
、%dpn0
和%*
echo /?
endlocal /?
for /?
goto /?
if /?
pause /?
rem /?
set /?
setlocal /?
title /?