【问题标题】:"which java" command in windows 7 returns weird pathWindows 7中的“which java”命令返回奇怪的路径
【发布时间】:2013-06-21 23:17:02
【问题描述】:

根据此处的文档link

要找出在您的 PATH 中找到的第一个 java 可执行文件,请执行:

which java

这个命令在我的机器中返回以下三个路径

C:\>which java
C:\Windows\system32\java.EXE
C:\Program Files (x86)\Java\jre7\bin\java.EXE
C:\Windows\System32\java.EXE

C:\Windows\System32 中没有 java.exe。 我在C:\Program Files (x86)\Java\jre7\ 位置安装了 java (Java SE 7 Update 25) 这也可以通过运行“where java”来确认

C:\>where java
C:\Program Files (x86)\Java\jre7\bin\java.exe

我在环境变量中设置了Path=C:\Program Files (x86)\Java\jre7\bin;。此路径未在任何环境变量中使用。

我想知道的是,which java 是如何以及为什么返回 C:\Windows\System32\java.EXE 并且也是两次?

由于 Windows 中没有原生的 which 命令,我刚刚发现创建了一个 which.exe 以使用以下脚本模仿“which”

@for %%a in (%PATH%) do @if exist %%a\%1 (
 for /f %%b in ('dir /b %%a\%1') do @echo %%a\%%b
)

@rem for %a in (%PATH%) do @if exist %a\which* dir /b /w %a\which*

【问题讨论】:

  • Windows 有which 命令吗? which which 的输出是什么? where 是什么?从未听说过 Windows 上有用的实用程序。你用 Cygwin 吗?
  • 是的,他一定在使用 Cygwin。 “哪个”是一个 unix 命令 - stackoverflow.com/questions/304319/…
  • @T-Bull 我在您的评论后进行了调查,发现使用以下脚本创建了一个 exe 来模仿“which”命令。 @for %%a in (%PATH%) do @if exist %%a\%1 ( for /f %%b in ('dir /b %%a\%1') do @echo %%a\%%b ) @rem for %a in (%PATH%) do @if exist %a\which* dir /b /w %a\which* 和 "which which" 返回 this which.exe 的路径
  • @ontherocks:哦,这很有趣,我会检查一下。顺便说一句,以@rem 开头的行不起作用,因为rem 是批处理文件中的注释标记(即该行已被注释掉)。

标签: java windows windows-7 command-line command


【解决方案1】:

您的操作系统必须是 Windows 7 64 位。而你的 jre 和 which 命令是 32 位应用程序。 64 位操作系统将%SystemRoot%\system32 目录用于其64 位库和可执行文件。这样做是出于向后兼容性的原因,因为许多遗留应用程序都经过硬编码以使用该路径。在执行 32 位应用程序时,WoW64 透明地将 32 位 DLL 重定向到包含 32 位库和可执行文件的%SystemRoot%\SysWoW64。 因此 32 位应用程序的 C:\Windows\system32\java.EXE 实际上是 C:\Windows\SysWoW64\java.EXE

【讨论】:

    【解决方案2】:

    在我的系统上,C:\WINDOWS\system32 中也有 java.exe。还有javaw.exejavaws.exe。事实证明,这些文件与我在C:\Program Files\Java\jdk7\bin 中的文件完全相同。因此,Java 安装程序似乎将它们复制到系统目录以防止路径问题。

    【讨论】:

    • 我的system32中好像也有java.exe。即使我选中了“显示隐藏的文件、文件夹和驱动器”并且未选中“隐藏受保护的操作系统文件(推荐)”,我也无法在资源管理器中查看它。它们仅显示在命令提示符中。你能在资源管理器中看到它们吗?
    • 是的,这里只是一个普通的文件。也许是因为我在那个盒子上运行 WinXP 并使用具有管理员权限的帐户。资源管理器配置为显示所有文件(创建新用户时的标准过程)。
    【解决方案3】:

    system32 中的 java.exe 看起来很奇怪,但是当你没有 java.exe 时它就很好。更奇怪的是我的Windows7上没有“which”命令,只是在哪里。 “哪个”可能来自 PATH 上的其他路径?

    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2012-06-21
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多