1、理论基础
1.1、命令行的前世今生
谈到 Windows 命令行就不得不说说 MS-DOS(DOS 的一种),MS-DOS 是微软公司的早期产品。后来微软推出了 Windows 操作系统,但早期的 Windows 中依然保留着 MS-DOS。从 Windows XP 开始,MS-DOS 被微软从 Windows 中移除,取而代之的是 Windows command line(Windows 命令行)。Windows 命令行延续了 MS-DOS 中的某些功能,相当于是简化版的 MS-DOS。
从 Windows XP 到最新的 Windows 10,每个版本的 Windows 都内置了命令行,用于运行 Windows 命令、脚本及工具。每一个新版本的 Windows 都会对命令行做一些扩展和增强,这种持续性更新使得 Windows 命令行能与时俱进。
我们通常所说的 Windows 命令行一般是指 Windows 系统自带的后台程序 cmd.exe,Windows 命令行本质上就是一种命令提示符工具。可以在 %SystemRoot%\System32 路径下找到 cmd.exe,而 64 位的操作系统中还可以在 %SystemRoot%\SysWOW64 路径下找到 64 位的 cmd.exe。
其它必要补充:
DOS(Disk Operating System)即磁盘操作系统,是一种命令行形式的单用户单任务操作系统。常见的有 MS-DOS、PC-DOS、Free-DOS 等,其中最富盛名的是 MS-DOS,它曾是个人电脑操作系统的霸主,后来逐渐被 Windows、macOS 等图形用户界面操作系统取代。
Windows PowerShell(powershell.exe)是一个功能完备的命令 shell,它包含了一些内置的命令(cmdlets)、内置的程序设计功能以及标准的命令行工具。PowerShell 从 Windows 7 开始被集成到 Windows 中,可以认为 PowerShell 是 cmd 的超集,因为 cmd 能完成的任务,PowerShell 一般也能完成,且二者的命令规则基本一致,但 PowerShell 还能额外完成许多 cmd 不能完成的任务。
Windows 批处理(Batch)就是对某一类对象进行批量处理,通常被认为是一种简化的脚本语言,Windows 批处理是指应用于 MS-DOS 和 Windows 中的批处理脚本。存放 Windows 批处理脚本的文本文件被称之为批处理文件,作用就是方便自动的连续执行多条命令,批处理文件的扩展名一般是.bat
或.cmd
。
1.2、命令执行规则
按存储方式可将命令行的命令分为内部命令和外部命令两种。内部命令是在系统启动后自动装入内存并常驻内存的可执行命令。外部命令是以可执行文件的形式存放在磁盘上,平时不占用内存,当输入对应命令之后,命令行会根据命令所指定的路径(未指定路径时会在当前目录和环境变量指定的目录中寻找可执行文件)在磁盘上找到该命令文件,并把该文件调入内存执行,执行结束后立即把所占内存释放。
可以在命令行中运行很多类型的命令,包括系统内置的命令、Windows 工具以及带有命令行扩展的应用程序。每一个运行的命令都遵循同样的语法规则,而不论其出处。这些规则要求命令行中运行的每一个命令都由命令名开始,其后跟随着必需的或可选的参数。在参数中还可以使用重定向方法执行输入源、输出目标以及错误日志。
基本的语法规则:
- Windows 命令不区分大小写。
- 外部命令如果不在当前驱动器的当前目录中,需要给出盘符和路径。内部命令不需要。
- 输入盘符时,冒号不能省略。
- 命令与参数之间必须有空格,而盘符与后面紧跟的参数之间不能有空格。
- 键入一个 Windows 命令后,必须按回车键才能执行。
在命令行中执行命令时,会涉及如下一些活动:
- 1、命令行使用实际值(实参)来替换用户在命令文本中输入的变量(形参)。
- 2、在单一命令行中结成命令链(或分组)并传递的多条命令被分解为单独的命令,每条命令带有自己的命令名与参数,并按序分别进行处理。
- 3、如果命令名带有文件路径,则命令行将使用这一路径找到该命令,如果在指定位置找不到该命令,则命令行将返回错误信息。
- 4、如果命令名没有指定文件路径,则命令行会尝试对该命令进行内部解析。如果可以找到匹配项,则说明该命令是一条内置命令,会被立即执行。如果找不到匹配项,则命令行会在当前目录下查找该命令的可执行文件,之后搜索该可执行文件的命令路径。如果这些位置都无法找到该命令,则命令行会返回错误信息。
- 5、如果命令定位成功,则该命令会使用指定的参数运行,包括那些要求输入的参数。命令输出与错误信息将会回显到命令窗口,或者写入到存储输出信息与错误日志的位置。
从上面可以看出,很多因素都可能会影响命令的执行过程,包括命令路径设置、使用的重定向技术,以及多条命令是否构成一个命令链或分组等。
1.3、使用命令历史
命令历史缓存是 Windows 命令行的一项功能,用于记录当前命令行会话中使用过的命令,允许在不重新键入命令的情况下再次使用。可以设置缓存命令数的最大值,默认为 50。
- 1、使用箭头浏览(适用 cmd.exe 和 powershell.exe)。使用向上、向下箭头,在缓存命令列表中上下移动,命令行就会依次显示之前输入过的命令。
- 2、在命令历史弹出窗口中浏览(仅适用 powershell.exe)。按 F7 会显示一个弹出窗口,其中包含了缓存命令的列表,然后通过上下箭头来选择命令。(或者按 F9 并输入命令对应的数字来选择命令)。按 Esc 退出弹出窗口。
- 3、搜索命令历史(仅适用 powershell.exe)。输入某条想要执行的命令中的少数几个字符,然后按 F8,之后命令提示符会在命令历史中搜索第一条已键入的字符引导的命令,过不是想要的命令,还可以再按 F8,继续搜索命令历史中下一条匹配的命令。
2、使用入门
2.1、启动和关闭命令行
启动命令行的方法很简单,只需要在开始或运行的输入框中键入 cmd 或 powershell 然后回车,即可启动命令行执行程序。如果需要以管理员的身份启动命令行,那键入 cmd 或 powershell 之后不要回车,在程序下面的 cmd.exe 或 powershell.exe 上右键,然后选择以管理员身份运行即可。
命令行工具一般都有命令提示符,Windows 命令行工具的命令提示符展示了当前的工作目录,默认为 %UserProfile%,即当前用户的文件目录。(%UserProfile% 是一个环境变量,Windows 中有许多类似的变量,如 %SystemRoot% 代表当前系统目录、%Path% 代表执行路径)
有时候已经打开一个命令行窗口了,但需要再单独启动一个窗口,以便运行其它指定的程序或命令,可以在当前窗口中通过start cmd
来实现。实际上 start 命令可以在新窗口中调用任何命令或程序,如start calc
表示新启动一个计算器,start explorer d:\
表示调用图形界面打开 D 盘。
要退出或关闭 cmd 或 powershell 窗口,直接点窗口右上角的关闭按钮当然是可以的。也可以在 cmd 或 powershell 中键入 exit 命令并回车来退出。该命令大多用于批处理脚本中。
2.2、执行简单的命令
在命令行程序窗口中执行 Windows 命令是比较简单的,正确键入命令然后回车,命令即可被执行并在窗口中回显执行结果。譬如要查一下当前系统的计算机名,可键入 hostname 然后回车,示例如图:
常见的简单命令说明列表如下:
序号 | 命令 | 功能 |
---|---|---|
1 | hostname | 打印当前主机的名称 |
2 | vel | 显示 Windows 版本 |
3 | vol | 显示磁盘卷标和序列号 |
4 | title [string] | 指定命令提示窗口的标题 |
5 | color [attr] | 指定控制台输出的颜色属性 |
6 | start [command/program] | 打开单独视窗运行指定命令或程序 |
7 | cls | 清空控制台窗口,重置屏幕缓冲 |
8 | pause | 暂停批处理程序,并显示“请按任意键继续. . .” |
9 | help | 查询所有命令(仅适用于 cmd.exe) |
10 | help *-* | 查询所有命令(仅适用于 powershell.exe) |
11 | >、>> | 重定向符 |
设置控制台输出的颜色
用color
命令,该命令用于设置命令行窗口的文本颜色和背景颜色。如color 07
表示将背景颜色设置为黑色(0)、将文本颜色设置为白色(7),默认即为 07。命令行窗口的颜色代码对照表如下:
代码 | 颜色 | 代码 | 颜色 | 代码 | 颜色 | 代码 | 颜色 |
---|---|---|---|---|---|---|---|
0 | 黑色 | 4 | 红色 | 8 | 灰色 | C | 浅红色 |
1 | 蓝色 | 5 | 紫色 | 9 | 淡蓝色 | D | 淡紫色 |
2 | 绿色 | 6 | 黄色 | A | 淡绿色 | E | 淡黄色 |
3 | 浅绿色 | 7 | 白色 | B | 浅水绿色 | F | 亮白色 |
将控制台回显内容写入到指定文件
有时候我们需要把一些命令的执行结果或控制台的回显内容保存下来,这时候就需要用到重定向符了。譬如当我们在 cmd 窗口中键入 help 之后回车就能查看到所有 cmd 支持的命令了,但窗口大小有限,那么多命令不方便查看,而且窗口一关就看不到了;还有就是有些命令的说明内容非常多,也不方便在窗口中具体查看。这些时候就我们可以把这些命令或说明保存到指定的文本文件中以便查看,示例:
其实 > 是个非常危险的命令,因为它会覆盖同名文件,而且不会有任何提示,即便你及时发现,按 Ctrl+Z 也恢复不了(事实上我发现命令行的所有操作都是无法回退的)。笔者就曾不小心把自己辛辛苦苦整理多天的资料给覆盖掉了,尝试了好几个办法都没能恢复。当你在用该命令时一定要小心谨慎,以防误操作,或者使用 >> 命令,该命令的作用是附加文本到文件末尾而不删除文件中的内容。
2.3、命令行执行程序使用技巧
没怎么用过(Windows 10 以下版本的)命令行的朋友可能会觉得很别扭、不习惯,我当初也是这种感觉。典型问题有:无法通过快捷键拷贝和粘贴,无法通过鼠标拖选等。
其实诸如拷贝、粘贴和托选等基本操作,也能在命令行中实现,只不过没有在 Windows 中操作那么流畅罢了。下面我就来逐一说明这几个动作该如何操作:
拷贝:在窗口内的任意位置【右键】,然后选择【标记】,接下来按住【左键】在想要拷贝的文本上【拖选】,最后一步最为关键,同第一步(即在窗口内的任意位置右键),这时候刚刚拖选的文本就已经被拷贝到系统剪切板了,直接到记事本或 Word 等编辑器中按 CTRL+V 即可粘贴刚才拷贝的文本。
粘贴:当你在编辑器里拷贝了写好的命令,再到命令行窗口中直接按 CTRL+V 是粘贴不了的。正确的方法是在窗口内的任意位置【右键】,然后选择【粘贴】即可。
拖选:内的任意位置【右键】,然后选择【标记】,接下来就可以拖选了,支持跨行拖选和区块拖选。
命令行执行程序还支持一些快捷键,掌握这些快捷键,能有效提升编辑速度。主要快捷键一览表:
序号 | 命令 | 功能 |
---|---|---|
1 | Delete | 删除光标处的字符,光标不移动 |
2 | Esc | 删除当前行 |
3 | Ctrl+S | 暂停显示(暂停屏幕输出以便阅读,按任意键继续) |
4 | Ctrl+C | 终止执行(终止当前一个命令或一个程序的执行) |
5 | Backspace/Ctrl+H | 退格并删除一个字符 |
6 | F7 | 打开历史命令列表 |
3、总结
在 Windows 中,命令行可以完成很多系统操作和任务,譬如管理 Windows 的事件、监控、性能、作业、磁盘、用户、域、打印、网络、磁盘管理、服务器集群等等,尤其是 powershell 甚至可以调用 .NET API,可谓是强大到令人惊艳。
另外,本系列博文不会讲解上文列举的任何内容,因为开发人员一般无需具体了解这些。除此之外也不会全面讲解命令行的各个体系、开关、设置等,但会挑一些本人觉得比较实用的命令和使用技巧具体讲述,如文件管理、服务管理等。
本文链接:http://www.cnblogs.com/hanzongze/p/cmd-tool-base.html
版权声明:本文为博客园博主 韩宗泽 原创,作者保留署名权!欢迎通过转载、演绎或其它传播方式来使用本文,但必须在明显位置给出作者署名和本文链接!个人博客,能力有限,若有不当之处,敬请批评指正,谢谢!