我想知道为什么命令java -version
是全球无障碍?
我可以从任何目录运行它并且它可以正常工作:
它是如何工作的?
我的系统PATH
变量如下所示:
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
对我来说,java.exe
位于%programfiles%\java\jre7\bin
答案1
通常,Windows 会找到一组目录,其中会重复使用可执行文件,但实际上,没有特定的理由将命令用作全局命令或不用作全局命令。开发人员过去常常将其作为“全局”命令包含在他们想要的任何位置,他们可以自由地这样做。如果您想将任何命令用作“全局”,则需要将命令添加为“Windows 环境变量”。为此,您可以使用以下方法:
使用“Windows 系统属性”手动添加:
使用附加工具Setx.exe:
它不是标准 Windows XP 设置的一部分,但 Windows XP Service Pack 2 支持工具中包含一个名为 setx.exe 的命令行工具。此工具扩展了 set 命令,以便可以对环境变量进行永久更改。例如,要将文件夹 C:\New Folder 添加到路径中,命令将是
setx path "%PATH%;C:\New Folder"
- 列出环境变量的脚本:
“Set”命令可以在命令提示符中与重定向到文本文件一起使用,以列出当前环境变量。该命令可能是
set > C:\env_list.txt
文件名“C:\env_list.txt”可以替换为您选择的任何名称。
Microsoft 还有一个 VBScript,可以列出这一页。
- 环境变量的注册表项:
对于有编辑注册表经验的用户,还有另一种方法可以更改环境变量。用户环境变量存储在注册表中的键中:
HKEY_CURRENT_USER\Environment
系统变量位于以下键中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
请注意,任何需要扩展的环境变量(例如 %PATH%)都必须作为 REG_EXPAND_SZ 注册表值存储在注册表中。编辑注册表主要用于系统管理员使用的脚本,不建议普通 PC 用户这样做。
您可以找到有关它的更多信息这里。
答案2
“全局命令”由您的环境变量决定。
根据您使用的操作系统,设置方法是相当不同的。
最通用的方法是
右键单击“我的电脑”选择“属性”
在 Windows7 中,您必须在左侧窗格中选择“高级系统设置”。
打开系统属性对话框后,选择“高级”选项卡。
在底部有一个按钮“环境变量”
在环境变量对话框中,您将能够为每个用户或整个系统配置环境变量。
例如,系统变量“路径”简化后看起来像这样...
C:\Program Files\Java\jre6\bin;C:\Ruby19\bin;
可以直接从命令行调用这些路径中的可执行文件。
您可以从运行对话框中调用 calc、mspaint、cmd 的原因是 C:\windows\system32 位于 Path 环境变量中。
您可以将自定义路径添加到环境变量中,注意不要覆盖现有路径,并使用分号分隔路径。“;”
然后,您可以直接在命令行中从该路径运行可执行文件,而无需输入整个路径,例如 java -version 命令。
欲了解更多内容,请参阅以下链接...
答案3
这是一个简单的示例which
,它显示 PATH 中当前 PATHEXT 扩展的所有命令命中:
@for %%I in ("%path:;=\" "%") do @for %%E in (%pathext:;= %) do @if exist "%%~dpI%1%%E" @echo %%~dpI%1%%E
把它放进去where.cmd
(which
如果得到它,允许它来自其他地方!)并用 调用它where java
。
现在,在我上面的评论中,我建议java
如果不是出现在你的PATH
,你可以签到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
[参考],但实际尝试后,它不适用于命令行,只适用于使用的东西ShellExecuteEx
,例如开始运行和start
CLI 命令。
答案4
当您输入命令时,shell 会查看名为 PATH 的环境变量(%PATH%、$PATH,具体取决于操作系统)。它会查询 PATH 上的每个目录,以查看是否遇到与您输入的命令匹配的可执行文件。它找到的第一个文件将被执行。
请参阅其他答案,了解设置 PATH 变量的各种方法。