使用setx /M path "%path%;%%winrar%%"这种方式修改环境变量存在的问题
对于 path 这种 既有用户级变量和系统级变量的变量 直接使用setx /M path "%path%;%%winrar%%"会将用户变量一起添加到系统级变量中。再加上已经存在的用户环境变量 path环境变量就会冗余。
不管是 path 或 echo %path% 亦或 set path 这三种方式都 只是将值 直接赋值给path,环境变量中的 引用的环境变量 全部破坏。
win10初始时的path
系统级path
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
%SYSTEMROOT%\System32\OpenSSH\
用户级path
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
使用path查看
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\zbf\AppData\Local\Microsoft\WindowsApps;
执行setx /M path "%path%;%%winrar%%"后的path
系统级path
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Windows\System32\OpenSSH\;
C:\Users\zbf\AppData\Local\Microsoft\WindowsApps;
C:\Program Files\WinRAR;
用户级path还会保留,还是原址
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
使用path查看
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\zbf\AppData\Local\Microsoft\WindowsApps;C:\Program Files\WinRAR;C:\Users\zbf\AppData\Local\Microsoft\WindowsApps;
给PATH追加环境变量
这里使用的方法时 直接从注册表中查,然后从查询结果中截取出数据,再使用setx将结果拼接上新路径 赋给Path
以下是从注册表中查询path的系统级变量,并截取出数据
@echo off
Setlocal enabledelayedexpansion
@REM vscode中自动开启延迟环境变量扩展,
@REM 环境变量在注册表中的位置
@REM reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "Path"
set key="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
@REM 方式1 分列方式感觉有点问题
@REM for /F "skip=2 delims=Z tokens=2*" %%i IN ('reg query %key% /v "Path"') do (
@REM echo %%i
@REM set temppath=%%i
@REM echo !temppath:~4!
@REM )
@REM 方式2
for /F "skip=2 delims=" %%i IN ('reg query %key% /v "Path"') do (
echo %%i
set temppath=%%i
echo !temppath:~29!
)
@rem 方式3
for /F "skip=2 tokens=3" %%i IN ('reg query %key% /v "Path"') do (
echo %%i
)
pause
|