01.gui操作
这是最常用的,我之前一直用的是这一种
在此电脑右键,属性,高级系统设置,环境变量。。。
02.set 命令
和linux系统不一样,linux里面是可以把命令配到bashrc之类的文件里,这样环境变量就一直生效了。
set命令,只在这个终端内生效,退出就失效。
虽然也可以像linux一样把命令放到$profile里面,但是我觉得比较蠢,因为这样只有powershell终端里面生效,换成cmd是不会加载你这个profile的。
这个和powershell里面直接修改变量是一样的
像下面这样操作,当前窗口,搜索命令的Path变量就添加了。
$env:Path + ";path/your/new"
03.使用reg文件
04 setx命令
属于是很老的命令了
基本用法
setx 变量名称 变量值
默认改的是用户环境变量,尾部添加/m,可以修改系统环境变量。
例子:jdk版本管理
因为jdk是通过JAVA_HOME变量配置的,所以可以下载多个jdk,然后用setx设置环境变量来切换
这里用到了gsudo这个软件,比较方便,没有装这个软件需要打开管理员的终端执行命令
#安装jdk11
sudo choco install microsoftopenjdk11
#上面安装完会提示安装jdk的位置,这里我们赋值之后设置JAVA_HOME,设置到系统变量。
sudo setx JAVA_HOME C:\Program Files\Microsoft\jdk-11.0.18.10-hotspot /m
#顺便把bin目录加到path
sudo setx Path ($env:Path +';C:\Program Files\Microsoft\jdk-11.0.18.10-hotspot')
❯ setx /?
SetX has three ways of working:
Syntax 1:
SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]
Syntax 2:
SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]
Syntax 3:
SETX [/S system [/U [domain\]user [/P [password]]]]
/F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]
Description:
Creates or modifies environment variables in the user or system
environment. Can set variables based on arguments, regkeys or
file input.
Parameter List:
/S system Specifies the remote system to connect to.
/U [domain\]user Specifies the user context under which
the command should execute.
/P [password] Specifies the password for the given
user context. Prompts for input if omitted.
var Specifies the environment variable to set.
value Specifies a value to be assigned to the
environment variable.
/K regpath Specifies that the variable is set based
on information from a registry key.
Path should be specified in the format of
hive\key\...\value. For example,
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\TimeZoneInformation\StandardName.
/F file Specifies the filename of the text file
to use.
/A x,y Specifies absolute file coordinates
(line X, item Y) as parameters to search
within the file.
/R x,y string Specifies relative file coordinates with
respect to "string" as the search parameters.
/M Specifies that the variable should be set in
the system wide (HKEY_LOCAL_MACHINE)
environment. The default is to set the
variable under the HKEY_CURRENT_USER
environment.
/X Displays file contents with x,y coordinates.
/D delimiters Specifies additional delimiters such as ","
or "\". The built-in delimiters are space,
tab, carriage return, and linefeed. Any
ASCII character can be used as an additional
delimiter. The maximum number of delimiters,
including the built-in delimiters, is 15.
/? Displays this help message.
NOTE: 1) SETX writes variables to the master environment in the registry.
2) On a local system, variables created or modified by this tool
will be available in future command windows but not in the
current CMD.exe command window.
3) On a remote system, variables created or modified by this tool
will be available at the next logon session.
4) The valid Registry Key data types are REG_DWORD, REG_EXPAND_SZ,
REG_SZ, REG_MULTI_SZ.
5) Supported hives: HKEY_LOCAL_MACHINE (HKLM),
HKEY_CURRENT_USER (HKCU).
6) Delimiters are case sensitive.
7) REG_DWORD values are extracted from the registry in decimal
format.
Examples:
SETX MACHINE COMPAQ
SETX MACHINE "COMPAQ COMPUTER" /M
SETX MYPATH "%PATH%"
SETX MYPATH ~PATH~
SETX /S system /U user /P password MACHINE COMPAQ
SETX /S system /U user /P password MYPATH ^%PATH^%
SETX TZONE /K HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\TimeZoneInformation\StandardName
SETX BUILD /K "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
NT\CurrentVersion\CurrentBuildNumber" /M
SETX /S system /U user /P password TZONE /K HKEY_LOCAL_MACHINE\
System\CurrentControlSet\Control\TimeZoneInformation\
StandardName
SETX /S system /U user /P password BUILD /K
"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
CurrentVersion\CurrentBuildNumber" /M
SETX /F ipconfig.out /X
SETX IPADDR /F ipconfig.out /A 5,11
SETX OCTET1 /F ipconfig.out /A 5,3 /D "#$*."
SETX IPGATEWAY /F ipconfig.out /R 0,7 Gateway
SETX /S system /U user /P password /F c:\ipconfig.out /X
Path变量设置
setx有一个问题是设置的最大长度是1024
所以path很长的时候,就不能用这个方法了。
比如我执行这个命令就会报错
sudo setx Path ($env:Path +';C:/Program Files/Microsoft/jdk-11.0.18.10-hotspot/bin') /m
WARNING: The data being saved is truncated to 1024 characters.
05.powershell调用.net
其中GetEnvironmentVariable,一个参数是变量名,第二个参数target是范围,可以是 Process(当前进程),User(当前用户)或 Machine(本地计算机)
# 获取当前的 path 值
$path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
# 添加新的路径到 path 中
$path += ";C:\NewPath"
# 设置新的 path 值
[System.Environment]::SetEnvironmentVariable("Path",$path,"Machine")
网友评论