Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


软件:windows:环境变量

Windows环境变量

外链资料:

  1. Windows 10 环境变量:通过 CMD 和 PowerShell 写入环境变量 https://sysin.org/blog/windows-env/ 归档

把操作系统(或者说bash更贴切吧)看作一个正在运行的程序的话,环境变量就是程序的「全局变量」

Windows可以通过可视化的方式查看、编辑环境变量,在Start中搜索「环境变量」(或对应英文)即可找到编辑窗口


总览

  1. 环境变量分为系统环境变量用户的环境变量,区别是作用范围不同
  2. 环境变量可以通过注册表访问和修改,具体方式不做记录。用户路径是:HKEY_CURRENT_USER\Environment;系统路径是:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment
  3. 环境变量可以通过图形界面(在开始菜单中搜索即可找到对应设置)访问和修改,具体方式这里也不做记录。路径是:此电脑,属性,高级系统设置,高级,环境变量
  4. 操作系统就像一个正在运行的程序,环境变量就像程序中普通的变量一样,有名字,可以访问和赋值
  5. 并不是只有Windows才有环境变量,操作系统都有环境变量
  6. 这篇笔记的主题主要是在命令提示符中访问环境变量,这种用法一般在Build Script中很常见,所以需要了解

获取环境变量

[存疑]对于系统变量和用户变量中存在的同名变量(比如path),访问结果是两个的拼合

CMD

# 两种方式
set 变量名(比如set path)
echo %变量名%(比如echo %path%)

PowerShell

# 查看所有的环境变量,其中env:被看作是一个虚拟驱动
ls env:
 
# 获取某一个环境变量的值(使用$符号)
$env:path

系统内置的环境变量(摘自参考资料)

%ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置。
%APPDATA% 局部 返回默认情况下应用程序存储数据的位置。
%CD% 局部 返回当前目录字符串。
%CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME% 系统 返回计算机的名称。
%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
%DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
%ERRORLEVEL% 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSEVER% 局部 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
%OS% 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径 (sysin)。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值: x86,IA64。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
%PROCESSOR_REVISION% 系统 返回处理器修订号的系统变量。
%PROMPT% 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统 返回包含 Windows XP 根目录(即系统根目录)的驱动器。
%SYSTEMROOT% 系统 返回 Windows XP 根目录的位置。
%TEMP% and %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。
%USERDOMAIN% 局部 返回包含用户帐户的域的名称。
%USERNAME% 局部 返回当前登录的用户的名称。
%UserProfile% 局部 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。

临时修改环境变量(当前会话生效)

[思考]因为是临时修改,所以不需要区分修改的是系统变量还是用户变量

CMD

# 修改变量值(等号两边最好不要留空格)
set 变量名=变量内容(比如set tmp=d:\tmp)

# 清空变量值,=后面什么都没有
set 变量名=(比如set tmp=)

# 拼接变量值
set 变量名=%变量名%;变量内容(比如set path=%path%;d:\go)

PowerShell

# 修改
$env:Test1="sysin.org"
 
# 清空/删除(注意这里没有$符号,因为没有访问这个变量的值)
del env:windir
 
# 拼接
$env:Path="$env:Path;C:\sysin"

持久化修改环境变量

CMD

[疑问]在CMD中,默认情况下,修改的是用户变量还是系统变量?

  1. 设置用户环境变量:setx “变量名” “变量值”
  2. 设置计算机(全局)环境变量:setx “变量名” “变量值” /m

PowerShell

# 获取用户变量Path
[environment]::GetEnvironmentvariable("Path", "User")
# 获取系统变量Path
[environment]::GetEnvironmentvariable("Path", "Machine")
 
# 持久化修改
[environment]::SetEnvironmentvariable("变量名称", "变量值", "User")
[environment]::SetEnvironmentvariable("变量名称", "变量值", "Machine")
 
# 变量值的位置,同样可以使用$取值,举个例子
[environment]::SetEnvironmentvariable("PATH", "$([environment]::GetEnvironmentvariable("Path", "Machine"));%GOROOT%\bin", "Machine")
/var/www/DokuWikiStick/dokuwiki/data/pages/软件/windows/环境变量.txt · Last modified: 2025/01/14 16:52 by zhonghui