什么是环境变量 环境变量(Environment Variables) 是 Windows 系统中的一种全局变量,它存储了操作系统、应用程序或命令行程序可以使用的配置信息。环境变量是以键值对的形式存储的。键是环境变量的名字,值是该变量的值。环境变量在 CMD(命令提示符) 和 PowerShell 中都有一些相关的命令,用于查看、修改、设置和删除环境变量。
打开 《环境变量》GUI界面
rundll32 sysdm.cpl,EditEnvironmentVariables
什么是环境变量
环境变量(Environment Variables) 是 Windows 系统中的一种全局变量,它存储了操作系统、应用程序或命令行程序可以使用的配置信息。
简单来说,它是一种 系统级或用户级的“信息存储”,让程序知道某些路径、设置或参数。例如:
- PATH:告诉系统在哪些文件夹里可以找到可执行程序。
- TEMP / TMP:告诉程序临时文件应该存放在哪里。
- USERNAME:当前登录的用户名。
- COMPUTERNAME:计算机名。
它们对程序和命令行非常重要,因为程序可以通过环境变量获取系统信息,而不用手动配置每个程序。
2️⃣ 怎么样查看和使用环境变量
操作描述 | GUI 操作路径 | CMD 命令(当前会话) | CMD 命令(永久设置) | PowerShell 命令(当前会话) | PowerShell 命令(永久设置) |
---|---|---|---|---|---|
查看所有环境变量 | 环境变量窗口列出用户和系统变量 | set |
set 仅当前会话,永久设置需用setx 但无法一次全部 |
Get-ChildItem Env: |
Get-ChildItem Env: 仅当前会话,永久设置需用其他方法 |
查看特定环境变量 | 在环境变量窗口中查找 | set <变量名> |
同上 | $env:<变量名> 或 Get-ChildItem Env:<变量名> |
同上 |
设置新的环境变量(用户) | 在用户变量部分点击“新建” | setx <变量名> "<值>" |
setx <变量名> "<值>" |
[Environment]::SetEnvironmentVariable("变量名", "值", "User") |
[Environment]::SetEnvironmentVariable("变量名", "值", "User") |
设置新的环境变量(系统) | 在系统变量部分点击“新建”(需要管理员权限) | 需要管理员权限:setx <变量名> "<值>" /M |
需要管理员权限:setx <变量名> "<值>" /M |
需要管理员权限:[Environment]::SetEnvironmentVariable("变量名", "值", "Machine") |
需要管理员权限:[Environment]::SetEnvironmentVariable("变量名", "值", "Machine") |
修改环境变量(用户) | 在用户变量部分选择变量并点击“编辑” | 同设置新变量,使用setx 覆盖 |
同设置新变量,使用setx 覆盖 |
同设置新变量,使用[Environment]::SetEnvironmentVariable |
同设置新变量,使用[Environment]::SetEnvironmentVariable |
修改环境变量(系统) | 在系统变量部分选择变量并点击“编辑”(需要管理员权限) | 需要管理员权限:setx <变量名> "<值>" /M |
需要管理员权限:《变量名> "<值>" /M` | 需要管理员权限:[Environment]::SetEnvironmentVariable("变量名", "值", "Machine") |
需要管理员权限:[Environment]::SetEnvironmentVariable("变量名", "值", "Machine") |
删除环境变量(用户) | 在用户变量部分选择变量并点击“删除” | reg delete "HKCU\Environment" /v <变量名> /f |
reg delete "HKCU\Environment" /v <变量名> /f |
[Environment]::SetEnvironmentVariable("变量名", $null, "User") |
[Environment]::SetEnvironmentVariable("变量名", $null, "User") |
删除环境变量(系统) | 在系统变量部分选择变量并点击“删除”(需要管理员权限) | 需要管理员权限:reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v <变量名> /f |
同上 | 需要管理员权限:[Environment]::SetEnvironmentVariable("变量名", $null, "Machine") |
需要管理员权限:[Environment]::SetEnvironmentVariable("变量名", $null, "Machine") |
将目录添加到PATH(用户) | 在用户变量部分选择Path,点击“编辑”,然后添加新目录 | setx PATH "%PATH%;<新路径>" (注意:有长度限制,且可能重复) |
同上 | $currentPath = [Environment]::GetEnvironmentVariable("Path", "User"); [Environment]::SetEnvironmentVariable("Path", "$currentPath;<新路径>", "User") |
同上 |
将目录添加到PATH(系统) | 在系统变量部分选择Path,点击“编辑”,然后添加新目录(需要管理员权限) | 需要管理员权限:setx PATH "%PATH%;<新路径>" /M (有长度限制,且可能重复) |
同上 | 需要管理员权限:$currentPath = [Environment]::GetEnvironmentVariable("Path", "Machine"); [Environment]::SetEnvironmentVariable("Path", "$currentPath;<新路径>", "Machine") |
同上 |
查看环境变量
环境变量操作对照表
操作类型 | GUI 操作 | CMD 命令 | PowerShell 命令 |
---|---|---|---|
打开设置界面 | 系统属性 → 高级 → 环境变量 | rundll32 sysdm.cpl,EditEnvironmentVariables |
rundll32 sysdm.cpl,EditEnvironmentVariables |
查看所有变量 | 在环境变量窗口中查看 | set |
Get-ChildItem Env: dir env: |
查看特定变量 | 在列表中查找 | echo %PATH% set PATH |
$env:PATH Get-ChildItem Env:PATH |
设置用户变量 | 用户变量区域点击"新建" | setx VAR_NAME "value" |
[Environment]::SetEnvironmentVariable("VAR_NAME", "value", "User") |
设置系统变量 | 系统变量区域点击"新建"(需管理员) | setx VAR_NAME "value" /M |
[Environment]::SetEnvironmentVariable("VAR_NAME", "value", "Machine") |
设置临时变量 | 无 | set VAR_NAME=value |
$env:VAR_NAME = "value" |
删除用户变量 | 选择变量点击"删除" | reg delete "HKCU\Environment" /f /v VAR_NAME |
[Environment]::SetEnvironmentVariable("VAR_NAME", $null, "User") |
删除系统变量 | 选择变量点击"删除"(需管理员) | reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v VAR_NAME |
[Environment]::SetEnvironmentVariable("VAR_NAME", $null, "Machine") |
添加到PATH | 编辑PATH变量,添加新路径 | setx PATH "%PATH%;C:\new\path" |
$newPath = $env:PATH + ";C:\new\path" [Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine") |
刷新环境变量 | 需要重启或注销 | 新开CMD窗口 | $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") |
常用示例
-
通过命令行:
- 打开命令提示符(cmd):
cmd
echo %PATH% echo %USERNAME%
- PowerShell 中:
powershell
$env:PATH $env:USERNAME
- 打开命令提示符(cmd):
-
通过图形界面:
- 右键 “此电脑” → 属性 → 高级系统设置 → 环境变量。
- 可以看到 用户变量 和 系统变量。
修改环境变量
- 临时修改(仅当前命令行会话有效):
cmd
set MYVAR=Hello echo %MYVAR%
- 永久修改(系统或用户级):
- 通过图形界面修改
- 或者在 PowerShell 中:
powershell
[System.Environment]::SetEnvironmentVariable("MYVAR","Hello","User")
3️⃣ 为什么需要环境变量
环境变量的存在主要有三个原因:
-
简化程序运行
- 例如 PATH 里有
C:\Program Files\Git\bin
,在命令行就可以直接输入git
,不需要每次写完整路径。
- 例如 PATH 里有
-
系统和程序共享信息
- 比如 TEMP、TMP 可以让所有程序知道临时文件存放位置。
-
配置灵活性
- 改变一个环境变量就可以影响多个程序,而不用修改程序本身配置。
💡 小结:
环境变量就像 Windows 系统的“全局记事本”,程序可以快速查到需要的配置信息。
- 是什么:存储系统和程序信息的变量
- 怎么用:通过命令行或系统设置查看/修改
- 为什么有用:方便程序运行、共享配置、提高灵活性
环境变量(Environment Variables)是操作系统中存储配置信息的一种机制,允许程序、操作系统或用户访问特定的系统信息,如路径、文件位置、临时存储等。
工作原理
-
定义与存储
环境变量是以键值对的形式存储的。键是环境变量的名字,值是该变量的值。例如,PATH
环境变量的值通常是一系列目录路径,操作系统在这些路径下查找可执行程序。 -
作用范围
- 系统级:影响计算机上所有用户和程序。系统管理员可以设置这些环境变量来影响所有的操作系统行为。
- 用户级:仅影响当前登录用户。例如,
USERNAME
变量储存的是当前登录的用户名。
-
访问方式
操作系统或程序可以通过系统调用来访问这些环境变量的值。例如,程序可以通过getenv()
等函数来获取环境变量的值。用户也可以通过命令行(如echo %PATH%
)来查看环境变量。 -
修改与影响
- 修改一个环境变量会影响所有依赖于该变量的程序。例如,修改
PATH
环境变量的值,会直接影响命令行执行程序的方式。 - 有些变量(如
TEMP
)控制文件的临时存放位置,改变它可以影响程序存储临时文件的位置。
- 修改一个环境变量会影响所有依赖于该变量的程序。例如,修改
-
动态与静态
- 环境变量可以在命令行会话中动态设置,仅对当前会话有效。通过
set
命令设置的环境变量只对当前命令行有效。 - 若要永久生效,则需要通过操作系统的设置界面修改(如系统属性中的环境变量设置)。
- 环境变量可以在命令行会话中动态设置,仅对当前会话有效。通过
环境变量(Environment Variables)在操作系统和软件开发中有着广泛的应用场景。以下是一些常见的 应用场景,帮助你更好地理解它们的用途和作用:
1️⃣ 配置程序运行环境
- 应用场景:不同程序运行时需要不同的配置参数,如数据库连接信息、应用密钥等。
- 例子:在开发环境中,你可能需要配置数据库的用户名、密码、端口等信息。这些信息可以通过环境变量传递给应用程序,而不需要硬编码在代码中。例如:
bash
export DB_HOST=localhost export DB_USER=root export DB_PASSWORD=secret
- 好处:保护敏感信息,避免代码泄漏,同时便于不同环境下(开发、测试、生产)动态调整配置。
2️⃣ 路径配置与程序执行
- 应用场景:设置操作系统的搜索路径,让系统能够找到可执行程序或库文件。
- 例子:在 Windows 中,
PATH
环境变量存储了一系列文件夹路径,操作系统会在这些路径下寻找可执行程序。当你在命令行中运行某个命令时,操作系统会根据PATH
变量来查找程序的执行文件。例如,安装 Git 后,如果其路径C:\Program Files\Git\bin
加入到PATH
中,你可以直接在任何目录下运行git
命令。 - 好处:简化命令的执行,不需要每次输入完整路径。
3️⃣ 控制临时文件存储位置
- 应用场景:设置系统或程序的临时文件存储路径(如缓存、临时文件等)。
- 例子:
TEMP
和TMP
环境变量定义了存放临时文件的目录路径。例如,Windows 默认将临时文件存储在C:\Windows\Temp
中,但如果你希望将其改为其他磁盘(如 D 盘),可以修改TEMP
环境变量的值。 - 好处:可以根据需要优化磁盘空间,避免将临时文件存储在系统盘,减轻系统盘的压力。
4️⃣ 多用户或多进程环境配置
- 应用场景:在多用户操作系统中,环境变量为每个用户提供独立的配置,使得用户之间的设置不会互相干扰。
- 例子:在 Linux 中,每个用户都可以有一个单独的
HOME
变量,指向自己的家目录。$HOME
环境变量可以让用户和程序访问其个人目录。 - 好处:提供个性化的配置和资源管理,确保不同用户之间的设置隔离。
5️⃣ 自动化脚本与构建工具
- 应用场景:在自动化脚本和构建工具中,环境变量用于传递和配置构建参数,如目标平台、版本号、构建类型等。
- 例子:在 CI/CD(持续集成/持续交付)流程中,工具(如 Jenkins 或 GitLab CI)会通过环境变量传递构建参数。例如,
BUILD_VERSION
环境变量可能存储当前的构建版本号,TARGET_ENV
存储当前的部署环境(如开发、测试、生产)。 - 好处:提高构建的灵活性和可重复性,避免硬编码。
6️⃣ 系统调试与日志管理
- 应用场景:调试程序时,开发人员可以通过环境变量来控制日志级别、调试信息等。
- 例子:在开发或生产环境中,可以设置
DEBUG
环境变量来启用或禁用调试日志输出。示例:bashexport DEBUG=true
- 好处:简化调试过程,允许动态调整程序的行为而不需要修改代码。
7️⃣ 跨平台配置
- 应用场景:不同操作系统或不同平台之间有不同的配置,环境变量可以用于跨平台开发时的配置管理。
- 例子:在开发跨平台应用时,程序可能需要在不同操作系统上使用不同的路径分隔符(如 Windows 使用
\
,Linux 使用/
)。通过环境变量,可以为不同平台提供不同的路径分隔符配置。 - 好处:简化跨平台开发,减少手动调整的工作量。
8️⃣ 定制化用户体验
- 应用场景:允许用户根据自己的偏好定制操作系统或程序行为。
- 例子:在 Linux 中,用户可以通过设置环境变量来自定义终端提示符的显示,例如使用
PS1
环境变量来改变终端提示符的格式。 - 好处:提高个性化设置,让用户有更多自由控制操作体验。
9️⃣ 云计算与容器化应用
- 应用场景:云环境和容器化平台(如 Docker)中,环境变量广泛用于配置应用程序。
- 例子:在 Docker 容器中,通常会通过
docker run
命令传递环境变量,如数据库连接信息、应用密钥等。这些环境变量帮助容器化的应用与外部系统(如数据库、API)进行交互。 - 好处:增强配置灵活性,使得容器在不同环境中能够动态适应。
环境变量是操作系统和应用程序之间的重要桥梁,它为程序提供了配置和灵活性。环境变量的应用场景非常广泛,从路径配置、临时文件存储,到跨平台配置和自动化脚本的传递,都离不开环境变量的支持。
环境变量在 CMD(命令提示符) 和 PowerShell 中都有一些相关的命令,用于查看、修改、设置和删除环境变量。下面是一些常用的命令和操作方法:
1. CMD(命令提示符)中的环境变量命令
查看环境变量
-
查看所有环境变量:
cmdset
- 这个命令会列出当前会话的所有环境变量及其值。
-
查看特定的环境变量:
cmdecho %ENV_VAR_NAME%
- 替换
ENV_VAR_NAME
为你想查看的环境变量名称。例如,查看PATH
变量的值:cmdecho %PATH%
- 替换
设置环境变量
-
临时设置环境变量(仅在当前 CMD 会话有效):
cmdset ENV_VAR_NAME=value
- 例如,设置一个
MY_VAR
变量:cmdset MY_VAR=HelloWorld
- 例如,设置一个
-
设置系统级环境变量(管理员权限):
cmdsetx ENV_VAR_NAME value /M
setx
会设置永久环境变量,/M
参数表示设置系统级别的环境变量。- 例如,设置
MY_VAR
为HelloWorld
:cmdsetx MY_VAR HelloWorld /M
- 注意:
setx
会在新打开的命令行窗口中生效,当前窗口需要重新打开。
删除环境变量
- 删除环境变量(仅当前会话有效):
cmd
set ENV_VAR_NAME=
- 例如,删除
MY_VAR
变量:cmdset MY_VAR=
- 例如,删除
刷新环境变量
- 刷新环境变量(使改动立即生效):
cmd
refreshenv
- 该命令通常需要安装 Chocolatey 包管理器,或者可以在某些开发工具(如 Visual Studio)中使用。
2. PowerShell 中的环境变量命令
查看环境变量
-
查看所有环境变量:
powershellGet-ChildItem Env:
Env:
是 PowerShell 中访问环境变量的特殊驱动器。
-
查看特定的环境变量:
powershell$Env:ENV_VAR_NAME
- 例如,查看
PATH
变量:powershell$Env:PATH
- 例如,查看
设置环境变量
-
临时设置环境变量(仅在当前 PowerShell 会话有效):
powershell$Env:ENV_VAR_NAME = "value"
- 例如,设置一个
MY_VAR
变量:powershell$Env:MY_VAR = "HelloWorld"
- 例如,设置一个
-
设置永久环境变量(系统范围):
powershell[System.Environment]::SetEnvironmentVariable("ENV_VAR_NAME", "value", [System.EnvironmentVariableTarget]::Machine)
- 这个命令设置永久的系统环境变量,需要管理员权限。
- 例如,设置
MY_VAR
为HelloWorld
:powershell[System.Environment]::SetEnvironmentVariable("MY_VAR", "HelloWorld", [System.EnvironmentVariableTarget]::Machine)
- 若要设置用户级别的环境变量,可以使用
User
代替Machine
。
删除环境变量
- 删除环境变量(仅当前会话有效):
powershell
Remove-Item Env:ENV_VAR_NAME
- 例如,删除
MY_VAR
变量:powershellRemove-Item Env:MY_VAR
- 例如,删除
刷新环境变量
- 刷新环境变量(在当前 PowerShell 会话中生效):
powershell
[System.Environment]::SetEnvironmentVariable("ENV_VAR_NAME", "value", [System.EnvironmentVariableTarget]::Process)
设置多个环境变量(批量处理)
- 批量设置环境变量(多行设置):
powershell
$Env:MY_VAR1 = "value1" $Env:MY_VAR2 = "value2"
总结:CMD vs PowerShell
- CMD:在命令提示符下,你可以使用
set
和setx
来查看、设置和删除环境变量。setx
适合用来设置永久环境变量。 - PowerShell:PowerShell 提供了更强大的功能,使用
$Env:
来查看和设置环境变量,且可以通过[System.Environment]::SetEnvironmentVariable
来设置永久环境变量。
两者的区别在于 PowerShell 更加灵活和现代化,特别是在处理复杂的脚本时,PowerShell 的语法更加方便和功能强大。
%windir%
是一个环境变量,它指向当前操作系统中 Windows 安装目录的路径。它常用于批处理文件、命令行或者脚本中,帮助系统或用户快速定位 Windows 系统文件夹的路径。类似的环境变量还有很多,它们通常用于在操作系统中快速访问重要的文件夹和目录,避免硬编码路径,从而提高脚本的可移植性和灵活性。
基本原理:
环境变量是操作系统用于存储和传递系统信息(如路径、配置、用户信息等)的名称-值对。操作系统和程序可以通过这些变量访问特定的系统资源或配置信息。
在 Windows 系统中,常见的环境变量包括:
-
%windir%:
指向 Windows 操作系统的安装目录,通常是C:\Windows
。这个变量用于指代系统目录,避免手动输入具体路径。 -
%SystemRoot%:
与%windir%
相似,通常也指向 Windows 安装目录。%SystemRoot%
是用于系统和程序查找 Windows 操作系统的根目录。 -
%ProgramFiles%:
指向默认的程序文件安装目录,通常是C:\Program Files
。这通常用于安装软件时存储程序文件。 -
%ProgramFiles(x86)%:
在 64 位系统上,指向 32 位程序的安装目录,通常是C:\Program Files (x86)
。 -
%USERPROFILE%:
指向当前用户的个人文件夹,通常是C:\Users\<用户名>
。它包含了该用户的桌面、文档、下载等用户目录。 -
%TEMP% / %TMP%:
用于指向临时文件夹,通常是C:\Users\<用户名>\AppData\Local\Temp
。这些文件夹用于存储临时文件,操作系统和程序在运行时可能会使用到这些位置来存储临时数据。 -
%APPDATA%:
指向当前用户的应用数据文件夹,通常是C:\Users\<用户名>\AppData\Roaming
,程序会将配置文件或状态信息存储在这里。 -
%SystemDrive%:
通常指向安装操作系统的磁盘驱动器(例如C:
)。这可以用来动态确定操作系统所在的驱动器盘符。 -
%PATH%:
指定一系列目录,操作系统通过这些目录查找可执行文件。在命令行中执行的命令会按照%PATH%
中的目录顺序来查找对应的可执行文件。 -
%HOMEDRIVE%:
指向当前用户的主驱动器,通常是C:
。它与%HOMEPATH%
一起使用来指向用户的主文件夹。
来源与使用场景:
-
来源:这些环境变量通常在操作系统安装时自动创建,或者由用户和应用程序在安装过程中定义。它们在系统运行时动态设置,允许程序根据当前的环境和配置来自动适配路径。
-
使用场景:
- 批处理脚本:利用环境变量使得路径更具可移植性。例如,批处理脚本中可以使用
%windir%
来调用系统文件夹,这样无论操作系统安装在哪里,脚本都能正常运行。 - 软件安装程序:大多数安装程序会根据这些环境变量来选择默认的安装路径。例如,许多程序会默认安装到
%ProgramFiles%
目录。 - 系统管理:管理员可以使用这些环境变量来制定脚本或配置,避免手动指定绝对路径,提高操作的灵活性。
- 批处理脚本:利用环境变量使得路径更具可移植性。例如,批处理脚本中可以使用
%windir%
和其他类似的环境变量是 Windows 系统中用来简化路径管理的重要工具。它们提供了一种灵活的方式来引用操作系统、用户和应用程序相关的目录,而无需硬编码路径。通过这些环境变量,脚本和程序能够更具可移植性和适应性,减少了路径错误和系统迁移的麻烦。
Windows 操作系统允许用户自定义创建环境变量,既可以是系统级别的,也可以是用户级别的。自定义环境变量可以帮助你在不同的程序或脚本中灵活使用路径和配置,避免硬编码路径,提升工作效率。
如何自定义创建环境变量:
1. 通过图形界面(Windows 设置)创建环境变量:
用户级环境变量(仅对当前用户有效):
- 右击 "此电脑" 或 "计算机" 图标,选择 "属性"。
- 在弹出的窗口中,选择左侧的 "高级系统设置"。
- 在 "系统属性" 窗口中,点击 "环境变量" 按钮。
- 在 "环境变量" 窗口下,点击 "用户变量" 部分的 "新建..." 按钮。
- 在弹出的对话框中,输入你想创建的变量名和对应的值,例如:
- 变量名:
MY_VAR
- 变量值:
C:\myfolder
- 变量名:
- 点击 "确定" 保存设置。
系统级环境变量(对所有用户有效):
- 重复上面的步骤进入 "环境变量" 窗口。
- 在 "系统变量" 部分,点击 "新建..."。
- 输入你希望创建的变量名和对应的值,然后点击 "确定"。
2. 通过命令行(CMD)创建临时环境变量:
你也可以通过命令行临时创建环境变量(只在当前会话有效,重启后会失效)。
set MY_VAR=C:\myfolder
通过 set
命令创建的环境变量只在当前命令行窗口有效,关闭窗口后会失效。如果你希望它在后续会话中持续有效,你需要将其添加到系统或用户的环境变量中。
3. 通过 PowerShell 创建环境变量:
你可以在 PowerShell 中使用 $env
变量来设置临时环境变量,效果与 set
命令类似:
$env:MY_VAR = "C:\myfolder"
同样,这种方式创建的变量也只会在当前 PowerShell 会话中有效。
4. 永久性修改环境变量(使用注册表):
如果你希望永久修改某些系统级的环境变量(不通过图形界面),你可以直接编辑注册表来实现:
- 打开 注册表编辑器(按
Win + R
,输入regedit
,然后回车)。 - 导航到路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
(系统级别环境变量)
或者HKEY_CURRENT_USER\Environment
(用户级别环境变量)。 - 在右侧窗格中右键点击,选择 新建 > 字符串值(或 新建 > 扩展字符串值,视需求而定)。
- 输入你想创建的变量名和对应的值。
- 修改完成后,关闭注册表编辑器,重启计算机或注销并重新登录生效。
注意事项:
- 用户级环境变量:这些变量只对当前用户有效。如果有多个用户使用同一台计算机,其他用户无法访问这些变量。
- 系统级环境变量:这些变量对所有用户有效。修改这些变量需要管理员权限。
- 自定义环境变量时,确保变量名没有与系统已有的环境变量冲突。
- 修改系统环境变量时,建议小心操作,避免误删或修改了重要的系统设置。
通过以上方法,你可以灵活地在 Windows 系统中创建自定义的环境变量,并在不同的应用和脚本中引用它们,从而使配置更加灵活和方便。