Java 如何从我的系统中获取/jre/bin路径

Java 如何从我的系统中获取/jre/bin路径,java,batch-file,Java,Batch File,我有bat文件(settings.bat)。我将把这个bat文件交给我的客户。我的客户没有任何技术知识。如果我的客户点击我的bat文件,我的java程序将运行。这是我的bat文件数据 set path = "java installation path" java addition java sutraction pause 在上面的bat set path=安装java软件的位置(/jre/bin) 现在我的要求是,我必须从执行这个bat的机器上获取java安装路径(…/jre/bin

我有bat文件(settings.bat)。我将把这个bat文件交给我的客户。我的客户没有任何技术知识。如果我的客户点击我的bat文件,我的java程序将运行。这是我的bat文件数据

set path = "java installation path"

java addition

java sutraction

pause
在上面的bat set path=安装java软件的位置(/jre/bin)

现在我的要求是,我必须从执行这个bat的机器上获取java安装路径(…/jre/bin)。有人能帮我吗

  • 首先,永远不要覆盖
    路径
    ,即使是 暂时。改为追加文件夹:
    set“path=%path%”;%myAppPath%”
    set“path=%myAppPath%”;%path%”
    • 注意并使用适当的
      引号,在
      =
      周围不留空格,以避免在所有空格中出现任何前导空格和尾随空格
    • 存在特定路径,因此可以使用
      path%path%;myAppPath%
  • 如果您知道程序的完整路径,请使用它,例如
    “%myAppPath%\myApp”
但是如何知道未知机器上程序的完整路径呢?让我们使用,请参阅从我的
cmd
窗口粘贴的示例:

==> where /F notepad.exe
"C:\Windows\System32\notepad.exe"
"C:\Windows\notepad.exe"

==> where /F pspad.exe
INFO: Could not find files for the given pattern(s).

==> where /F pspad.exe 2>NUL

==> where /R "%ProgramFiles%" /F pspad.exe 2>NUL

==> where /R "%ProgramFiles(x86)%" /F pspad.exe 2>NUL
"C:\Program Files (x86)\PSPad editor\PSPad.exe"
将我的应用程序的路径存储到变量(最后一次出现):

第一次出现):

将其全部放在一个批处理脚本中:

@ECHO OFF
SETLOCAL EnableExtensions
set "myApp=%~1"
if not defined myApp set "myApp=java.exe"
set "myAppPath="
rem search in %path% environment variable
for /F "delims=" %%G in ('
    where /F %myApp% 2^>NUL
  ') do set "myAppPath=%%~dpG" & goto :no1 
:no1
rem search in %ProgramFiles% folder recursively
if not defined myAppPath for /F "delims=" %%G in ('
      where /R "%ProgramFiles%" /F %myApp% 2^>NUL
    ') do if not defined myAppPath set "myAppPath=%%~dpG" & goto :no2
:no2
rem search in %ProgramFiles(x86)% folder recursively
if not defined myAppPath (
  if defined ProgramFiles^(x86^) for /F "delims=" %%G in ('
        where /R "%ProgramFiles(x86)%" /F %myApp% 2^>NUL
      ') do set "myAppPath=%%~dpG"  & goto :no3
)
:no3
rem search in %SystemDrive%\ disk recursively
if not defined myAppPath for /F "delims=" %%G in ('
      where /R %SystemDrive%\ /F %myApp% 2^>NUL
    ') do set "myAppPath=%%~dpG"  & goto :no4
:no4
rem populate results
if defined myAppPath (echo could run "%myAppPath%%myapp%") else (
  echo '%myapp%' not found in %SystemDrive%\ disk
) 
输出

==> set "myAppPath="

==> for /F "delims=" %G in ('where /F notepad.exe 2^>NUL') do @set "myAppPath=%~dpG"

==> set myAppPath
myAppPath=C:\Windows\
==> set "myAppPath="

==> for /F "delims=" %G in ('where /F notepad.exe 2^>NUL') do @if not defined myAppPath set "myAppPath=%~dpG"

==> set myAppPath
myAppPath=C:\Windows\System32\
==> 34039382.bat notepad
could run "C:\Windows\System32\notepad"

==> 34039382.bat iexplore.exe
could run "C:\Program Files\Internet Explorer\iexplore.exe"

==> 34039382.bat pspad.exe
could run "C:\Program Files (x86)\PSPad editor\pspad.exe"

==> 34039382.bat psexec.exe
could run "C:\Utils\Sysinternals\psexec.exe"

==> 34039382.bat
'java.exe' not found in C:\ disk
这篇oracle文章声明Java安装程序将
Java.exe
复制到系统目录中:

安装了两个
java.exe
可执行文件副本。一个副本位于 JRE的
bin
目录。第二个副本放在
C:\windows\system
C:\winnt\system32
,具体取决于系统。 因为它位于系统目录中,所以
java.exe
可以从任何目录位置启动,而无需 提供它的完整路径


使用命令
where java
为什么不在应用程序中打包jre?这样你就可以不用搜索就精确地设置jre路径。如果你的客户端没有安装java,它也可以工作。使用此解决方案,你将始终拥有正确的jre版本。我的客户端安装了java。但他没有为此设置路径。如果我在java中,我没有获取我的java安装路径。在我的mechine中,java installed like../jre/bin文件夹在那里。现在我想获取包含../jre/bin的路径。我想要一个命令,该命令应该返回我的mechine上的java安装路径。