命令行提示“不是内部或外部命令”但程序已安装、需要设置 JAVA_HOME/PYTHONPATH/代理、或服务读到的变量与当前终端不一致时使用。不要把所有工具目录都塞进系统 PATH,也不要反复用 setx PATH "%PATH%;...":它覆盖写入,拼接错误会丢失条目或截断 PATH。
echo %PATH%,持久值查注册表或图形界面。Win+R 输入 sysdm.cpl →“高级”→“环境变量”。上半部分是用户变量,下半部分是系统变量;选中 Path 点“编辑”,用列表逐条添加,避免整段字符串拼接。
C:\> set JAVA_HOME
C:\> set PATH=%PATH%;C:\Tools\bin
C:\> echo %JAVA_HOME%
set 只影响当前命令行窗口,关闭即失效,适合临时测试。
C:\> setx JAVA_HOME "C:\Program Files\Java\jdk-21"
C:\> setx MY_TOOLS "%USERPROFILE%\Tools"
C:\> setx /M JAVA_HOME "C:\Program Files\Java\jdk-21"
C:\> reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path
setx 写入后不影响当前窗口;值超过 1024 字符时旧版 setx 可能截断。
PS C:\> $old = [Environment]::GetEnvironmentVariable("Path","User")
PS C:\> [Environment]::SetEnvironmentVariable("Path", $old + ";C:\Tools\bin", "User")
影响范围:
setx /M PATH ...会改写所有用户和服务的 PATH。先reg export备份HKCU\Environment和HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,再用图形界面追加。
cmd,执行 echo %JAVA_HOME% 和 where java,确认路径和顺序。where <命令> 列出所有匹配项,检查 PATH 中是否混有旧版本。PS C:\> Get-Command java | Select-Object Source 查看实际解析到的可执行文件。reg export);回滚时导入备份或手工恢复原值。setx 是覆盖不是追加;写错系统 PATH 可能让新终端找不到系统命令,需用完整路径打开 regedit 修复。setx 是否把引号也写进了值。合上页面,先回答,再展开对照。
set 和 setx 的作用范围有什么区别?setx PATH "%PATH%;C:\Tools" 很危险?set 只影响当前进程/窗口,setx 写入用户或系统的持久环境。
小程序版
微信扫码,随时查命令