如何让用户路径的解析优先于系统路径?

tes*_*st8 5 windows path-variables

在windows系统中,变量环境中不同路径的顺序PATH定义了解析优先级:

例子:

  • 如果路径由以下组成:C:/Dir1;C/Dir2
  • 并含有C:/Dir1/test.exeC:/Dir2/test.exe
  • 在cmd中运行test.exe将解析为C:/Dir1/test.exe

这很好,但在 Windows 中有两个 PATH,用户路径和系统路径。并且有以下串联:<system-path>;<user-path>

因此,系统路径似乎总是优先于用户路径。

我错了吗 ?

问候,

Xue*_*eng 1

如果您使用的是 PowerShell

该函数GetEnvironmentVariable可以分别获取用户变量和系统变量。因此,您可以将以下设置添加到您的中$PROFILE,通常是$env:USERPROFILE\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

$env:PATH = [Environment]::GetEnvironmentVariable("Path", "User") + ';' + [Environment]::GetEnvironmentVariable("Path", "Machine")
Run Code Online (Sandbox Code Playgroud)

或者,如果您想在 current 前面添加一些路径$env:PATH,而不是在系统路径之前移动整个用户的路径,您可以添加:

$env:PATH = 'C:\Dir1;' + $env:PATH # note there's a semicolon
Run Code Online (Sandbox Code Playgroud)

对于命令提示符

参考这个答案

如果您只需要它适用于命令提示符会话,请创建一个 profile/init 批处理文件并在注册表中配置它,请参阅如何在 Windows 中的命令提示符启动时运行命令。例如,

reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun ^
 /t REG_EXPAND_SZ /d "%"USERPROFILE"%\init.cmd" /f
Run Code Online (Sandbox Code Playgroud)

然后只需修改该批处理文件中的 PATH 即可。例如,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%
Run Code Online (Sandbox Code Playgroud)