CMD, 命令提示符, 环境变量
早在 Windows 系统之前, 有一操作系统名为 MS-DOS. 该操作系统没有图形操作界面, 只能通过一条条手打的命令行来实现操作.
命令提示符
至现在(2021年), Windows 已是世界上使用人数最多的操作系统, 它有着完善的图形操作界面, 几乎所有操作都可以通过图形界面来实现. 但是通过命令行来操作计算机的方式, 还是通过'命令提示符'而保留了下来.
启动 CMD, 可通过以下步骤进行: "右击开始菜单按钮 -> 运行 -> 输入'cmd' -> 确认", 或者直接通过快捷键 "Win + R" 来启动 "运行" 窗口, 然后键入 "cmd", 并确认.
没错, 命令提示符就是在当今 Windows 操作系统时代中 MS-DOS 指令的替代品. 在这个黑底白字的框框中, 你可以输入指令来实现你想要的操作, 并且对于程序员来说, 命令提示符是不可或缺的工具之一.
命令提示符, 即, CMD.
CMD 指令
在 CMD 中, 指令分为内置指令和外置指令. 内置指令是 CMD 本身就包含的指令, 例如 'echo' 指令, 它用于标准输出, 打印一行内容.
语法:
- echo [on/off] 设置或显示当前的回显状态
- echo 内容 打印一行内容
需要知道的是, 这里不说 DOS 指令而是说 CMD 指令, 是因为, CMD 虽为 MS-DOS 的替代品, 但指令不完全一致, 例如在 MS-DOS 中, 不存在 'echo' 指令, 也不存在 'set /p' 的用法.
在 CMD 中, 可通过 help 指令来查询部分指令的帮助手册. 语法如下:
- help 指令名
而大部分指令, 也支持通过指定 '/?', '/help', '-help' 或 '--h' 来显示帮助手册. 这是一个约定俗成的习惯.
内置指令的数量不是很多, 但包含了所需的基本功能, 例如标准输入输出指令, 流程控制指令, 循环指令, 基本的文件操作指令等.
但事实上, 最重要的部分还是外部指令. 外部指令是计算机中的可执行程序, 例如 explorer, explorer 是 Windows 操作系统中的文件资源管理器, 在 CMD 中可以这么使用:
- explorer 目录路径 使用文件资源管理器来打开一个文件夹.
像是 Java 开发者常用的 'java' 与 'javac' 指令, 就是外部指令.
如果要查找一个外部指令的完整路径, 可以使用 where 指令.
- where 匹配内容 显示匹配内容对应文件的位置
工作目录
看到这里了吗? 这个就是你当前的工作目录.
例如, 我现在的工作目录是 "C:\Users\Null", 我要显示这个目录下面 ".myeclipse.properties" 文件的内容, 就不需要指定完整的路径 "C:\Users\Null.myeclipse.properties", 而仅仅指定文件名即可.
type .myeclipse.properties
目录操作
工作目录差不多懂了吧, 那么, 下面来看看如何改变工作目录, 使用 'cd' 指令.
cd 即 'change directory', 也就是 '改变目录'. 用来改变当前的工作目录. 语法:
- cd [drive:][path] 改变工作路径到某个路径
例如我现在在用户目录下 'C:\Users\Null', 有一个 'Desktop' 目录在这个用户目录下, 如果要改变工作目录到 'Desktop' 中, 可以直接使用 'cd Desktop'
如果想要改变工作目录到上级目录, 使用路径 ".." 即可, 因为 ".." 表示上级目录, 所以 "cd .." 即可改变工作目录到上级目录.
或者, 还可以这么玩. 例如你要进入上级目录中的 'Administrator' 文件夹, 可以直接 "cd ..\Administrator".
需要注意的是, 如果你当前的工作目录在 C 盘, 但你希望变更工作目录到 D 盘, 那么仅仅使用 'cd' 指令是不管用的. 你需要先执行 "D:" 将工作目录变更到 D 盘, 然后再通过 cd 来改变目录到你希望到达的目录. 或者另一种方式就是指定 '/d', 即执行: "cd /d D:\你希望的目录"
环境变量
环境变量, 即 Environment Variables. 是 Windows 系统中, 所有进程都可访问的变量. 什么? 你说你不知道什么是变量? 你可以把变量理解为一些值, 并且可以通过变量的名字来获取对应的值.
环境变量在系统中有一定值, 并且每当一个进程启动时, 这个进程都会拷贝一份环境变量供自己使用. 进程可以设置自身进程的环境变量, 但不可以设置其他进程的环境变量, 更不可以直接设置系统的环境变量.
进程可以查询这些环境变量, 并且根据变量值来执行对应的操作. 例如 'javac' 指令, 在执行时会判断 'JAVA_TOOL_OPTIONS' 环境变量的值, 然后执行对应操作. (Java 开发者常常使用这个变量来指定编译时使用特定的文本编码)
在 CMD 中, 有 'set' 指令可以用来访问当前进程的环境变量, 语法如下:
- set 不指定任何参数, 执行后将显示当前所有的环境变量
- set 变量名=变量值 设置一个环境变量的值
在 CMD 中, 如果要使用变量的值, 只需要使用百分号 '%' 来包裹变量名的值. 例如我要显示 USERNAME 这个环境变量的值, 只需要使用这个指令:
echo %USERNAME%
可以看到, 成功显示了我的用户名(Null).
或者我们可以试着设置这个变量的值, 然后再看看是否生效.
echo %USERNAME%
set USERNAME=TestValue
echo %USERNAME%
可以看到, 环境变量的设置生效了. 但是, 如果你重启 CMD, 再显示 USERNAME 的值, 你会发现, 值还会恢复到原来的值. 原因我们刚刚已经提到, 进程可以改变自身环境变量的值, 但不可以更改其他进程甚至系统的环境变量值.
1. PATH 环境变量
PATH 环境变量, 对于 Java 开发者, 肯定是熟悉的不得了, 配置 Java 开发环境就需要设置 PATH 环境变量的. 而 PATH, 也是有其作用的.
PATH 的值是以分号分隔的, 多个目录的路径. 当你尝试启动一个程序(例如运行外部指令), 并仅仅指定这个程序的名字而不是完整路径时, 首先, 程序会在工作路径中查找是否能找到这个程序, 然后再从 PATH 环境变量中的各个目录中查找.
我们继续拿配置 Java 开发环境来举例子. 在安装完 JDK 后, 肯定是无法立即运行 javac 指令的, 这其实就是在 CMD 中运行指令时, CMD 找不到这个程序. 在工作路径中找不到, 在 PATH 的各个目录中也找不到, 就显示 "不是内部指令也不是外部指令" 咯.
解决方式也简单, 也就是将 javac 的所在目录添加到 PATH, 这样在 CMD 运行外部指令时就会去 javac 的所在目录查找, 也就能够找到 javac 这个程序, 也就能够直接执行 javac 指令了.