序
开发人员搭建本机开发环境,经常需要安装各种工具,如git 、npm、python 等。他们常常会被我们主动或者被动的在命令行中调用。
一个比较常见的错误是:
xxx 不是内部或外部命令,也不是可运行的程序或批处理文件。
这与操作系统的环境变量有关,环境变量是初级开发者必须了解的常识。
下面以 win11 为例,让我们了解环境变量这一概念。
核心概念
Windows 11操作系统中,变量分为用户变量和系统变量。
- 用户变量:是指只对当前用户有效的环境变量,只影响当前用户的会话。
- 系统变量:是指对所有用户有效的环境变量,影响整个系统的运行环境。
用户变量和系统变量都是存储在操作系统中的字符串值,可以包含路径、文件名、配置信息等。无论是用户变量还是系统变量,都可以在命令行或脚本中使用%变量名%的形式来引用它们的值。例如,%USERPROFILE%是一个用户变量,它指向当前用户的个人文件夹路径。
面板查看
- 使用搜索功能找到
编辑系统环境变量,点击进入 - 点击
环境变量, 即可查看环境变量面板
- 通过编辑按钮可对选中环境变量编辑
命令行
查看
在PowerShell中,可以使用以下命令来查看环境变量的值:
- 输入“Get-ChildItem Env:”命令并按Enter键。这将显示所有环境变量及其值。
- 若要查看特定环境变量的值,可以使用 $env:变量名 语法。例如,要查看PATH环境变量的值,可以输入“$env:PATH”并按Enter键。
CMD中,可以使用以下命令来查看环境变量的值:
-
输入“set”命令并按Enter键。这将显示所有环境变量及其值。
-
若要查看特定环境变量的值,可以输入“echo %变量名%”命令并按Enter键。例如,要查看PATH环境变量的值,可以输入“echo %PATH%”并按Enter键。
如果变量的值包含空格或其他特殊字符,则需要将其放在引号中。例如,要查看包含空格的变量MY VARIABLE的值,可以输入“echo "%MY VARIABLE%"”并按Enter键。
设置
要在PowerShell中设置环境变量,可以使用以下命令:
- 使用$env:变量名="变量值"命令来设置环境变量
- 设置环境变量后,可以使用“$env:变量名”命令来查看变量的值
要在CMD中设置环境变量,可以使用以下命令:
- 输入“set 变量名=变量值”命令并按Enter键
- 设置环境变量后,可以使用“echo %变量名%”命令来查看变量的值。
请注意,设置的环境变量只在当前会话窗口中有效。如果要在所有命令行窗口中使用该环境变量,需要将其通过面板添加到系统环境变量中。
Path
Path环境变量是操作系统中非常重要的环境变量之一,它用于指定可执行文件的搜索路径,让操作系统能够在任何目录下找到系统所需的可执行文件。具体来说,当用户在命令行界面上输入一个可执行文件的名称时,操作系统会在Path环境变量指定的路径中搜索该文件,并将其加载到内存中执行。
Path环境变量的意义在于,它能够让用户或应用程序方便地执行任何可执行文件,而不需要知道该文件的具体位置。
所以,当用户安装一些软件时,软件可能会添加或让用户选择添加,自己安装后的可执行文件夹路径,到Path环境变量中,以便用户可以方便地执行该软件的可执行文件。
反之,如果未在安装时添加可执行文件夹路径。则会在直接使用时,得到类似:xxx 不是内部或外部命令,也不是可运行的程序或批处理文件 的警告。此时,就需要用户手动添加可执行文件夹路径到PATH环境变量中。
以 CMake 为例
CMake 是一个跨平台的开源构建工具,用于自动化 C++ 程序的构建、测试和打包过程。
仅作为演示用例,无所谓功能。
安装
1.从 cmake.org 下载安装包
-
根据指引安装
注意,这里就是在安装时是否选择将可执行文件写入 PATH 环境变量(系统变量或用户变量)。
为了演示,我们选择不添加(默认)。
-
选择安装目录
-
完成安装
设置环境变量
因为在安装时,没有添加环境变量。所以,现在执行 cmake 命令时,找不到可运行程序的。
我们需要手动添加环境变量:
-
打开环境变量面板
-
选中 Path ,点击编辑
-
复制可执行文件夹路径
-
点击新增
-
拷贝路径
-
逐一点击确定,至关闭所有相关面板
-
打开命令行工具验证
在配置路径时,我们也可以通过 %变量名% 引用已有的环境变量。
例如,我们已经将Java的安装路径添加到系统环境变量 JAVA_HOME , 在 Path 中添加可执行文件夹,只需要使用 %JAVA_HOME%\bin .
结
了解环境变量这一个概念,我们可知
- 使用命令行是系统通过 Path 找到并执行对应可执行文件,如果出现调用异常,我们可以自行排查环境变量来修复
- 如果软件安装时未选择添加可执行文件到 Path ,或者使用某些绿色免安装版的工具,都可以手动到环境变量面板上去添加
- 我们可以利用“命令行设置的环境变量只在当前会话窗口中有效”,来简化在一个会话中的命令,例如重复使用的文件路径等。
- 如果我们在 Path 中, 通过 %变量名% 引用已有的环境变量。在会话中修改该变量,就可快速切换该变量指向的可执行文件夹。通过这一点可以实现,在当前会话中,临时切换某一可执行文件的版本。