分类
教程

常用命令行操作

以下内容适合Windows。

Windows拥有出色的图形界面,我们在日常操作中可能很少接触Windows的命令行工具。然而,当我们决定要成为程序员时,我们就必不可少地要跟命令行工具打交道了。

启动命令行工具

Windows拥有两大命令行工具——经典的cmd.exe和更“现代”的PowerShell(简称PS)。有多种方式可以启动命令行工具。

  • 使用运行工具(Win+R)。启动”cmd.exe”或”powershell.exe”。(你也可以不输入exe后缀名)
  • 打开开始菜单,搜索并启动“命令提示符”或“Windows PowerShell”。
  • 使用文件资源管理器的“文件”菜单中的“打开Windows PowerShell”选项。
通过打开文件资源管理器打开命令行工具时,命令行工具会自动定位到文件资源管理器当前的目录

初探命令行工具

PowerShell

你可以自由探索一下你的命令行工具,尝试一下复制粘贴和其他编辑功能。

(提示:尽管右键菜单不可用,你可以按住鼠标左键框选你需要的文字,再按一下右键,内容会复制到粘贴版;再按一次右键粘贴版中的内容会粘贴到输入框中。Ctrl+V将在一些特殊情况下无法使用。点击命令行工具窗口左上角的Logo图标会出现弹出式菜单。要换行,请按Ctrl+Enter。要搜索,请按Ctrl+F。要查看曾经使用过的命令,请按 ↑ 键或 ↓ 键。你可以输入“help”命令后回车,命令行工具会为你输出大段文字,这可以帮助你练习这些功能。)

闪烁的插入光标前指示了Windows命令行工具的工作路径。截图中的工作路径是“C:\Users\light”。注意,Windos使用反斜杠“\”来区分目录层次,而Linux和URI中使用的是正斜杠“/”。

为什么需要工作路径?假设我的电脑上C:\Users\light路径下有一个可执行程序a.exe,C:\Users\zachary路径下有同名的可执行程序a.exe。假设没有工作路径,电脑就不能知道我想运行的是哪一个a.exe;消除歧义是工作路径存在的一个原因。

cd命令展示,注意工作路径的变化

我们可以使用cd命令切换工作路径。截图展示了cd命令的几种用法。两个英文句点“..”表示当前路径的父路径。一个英文句点“.”表示当前路径。切换工作路径的好处在于,如果工作目录下有你需要的程序或文件,你可以很方便地指定它而无需附带路径。(以后会慢慢体会到这一点)

(提示,如果路径中有空格,如“D:\Program Files”,使用cd命令时用英语引号” “或’ ‘将路径包裹起来,例如  cd “D:\Program Files” 。关于这一点,在下一节会介绍相关问题)

在命令行工具中输入可执行程序的名字并回车,工具会自动搜素这个程序并在找到程序时运行它。

例如,如果你的工作目录是“C:\Program Files\腾讯游戏\英雄联盟\TCLS”,要运行英雄联盟,你只需要输入“client.exe”并回车。如果你的工作目录不是“C:\Program Files\腾讯游戏\英雄联盟\TCLS”,你可以切换到这个目录,或者直接输入“C:\’Program Files’\腾讯游戏\英雄联盟\TCLS\client.exe”并回车。(注意Program Files外围的引号)

我们之前在“了解和调整Windows以适合编程”一文的“运行窗口”小节中提到过Path变量。Windows命令行工具会从Path变量的路径中搜索可执行程序。此外,CMD和PS有所区别,CMD除了从Path变量中搜索可执行文件外还会自动地从当前工作路径搜索程序,并且当前工作路径优先于Path中指定的路径。处于安全问题考虑,PS默认只从Path路径中搜索可执行文件,要运行当前工作目录下的程序,需要显式地使用“.\可执行程序名”来指定这个程序。

使用PS要注意路径

使用帮助系统

基本语法

Windows的命令行工具内建了帮助系统,帮助命令的语法是

help [command]

在CMD中还可以使用下面的语法

[command] /?

在PS中还可以使用下面的语法

man [command]

辨识命令的参数

参数是提供给命令(或称为“函数”)的额外信息。有些命令不需要参数,有些命令的参数可有可无,有些命令要求必须提供参数。我们来看一个例子:输入 help cd 来查看cd命令的帮助。在帮助中会显示一个命令的参数列表。

C:\Users\light>help cd
显示当前目录名或改变当前目录。

CHDIR [/D] [drive:][path]
CHDIR [..]
CD [/D] [drive:][path]
CD [..]

........
PS C:\Users\light> help cd

......

语法
    Set-Location -LiteralPath <String> [-PassThru] [-UseTransaction] [<CommonParameters>]

    Set-Location [[-Path] <String>] [-PassThru] [-UseTransaction] [<CommonParameters>]

    Set-Location [-PassThru] [-StackName <String>] [-UseTransaction] [<CommonParameters>]

......

我们重点关注语法部分。从语法信息中可以得知,命令与参数、参数与参数之间以空格分开。在语法信息中,方括号“[ ]”包围的参数是“可选参数”,尖括号“<>”包围的参数是必须参数。以cd命令为例,cd命令的参数列表中所有参数都由方括号包裹,这说明cd命令可以不带参数执行。

注意“参数的参数”。在Set-Location -LiteralPath <String> 这个语句中,-LiteralPath 本身是Set-Location 命令的可选参数,而-LiteralPath 本身需要一个必须参数<string> 。也就是说,如果你在cd命令中使用了-LiteralPath 参数,就必须为-LiteralPath参数提供一个参数,也就是“参数的参数”。

理解起来有点困难?没关系,实际运用起来没那么复杂。

常用命令

Windows简洁的图形界面使得我们很少使用这些命令,但有时命令行工具会帮助我们事半功倍地实现目标。

PowerShell被设计用来取代CMD,PowerShell的命令名语法相比于CMD区别很大。一方面,PowerShell的标准函数名比较长,书写起来不太方便。另一方面,出于兼容CMD的命令的考虑,PowerShell使用别名机制。这在之前的博文中提到过,PowerShell的很多cmdlet函数的别名是同等功能的CMD命令名。比如“cd”命令在PowerShell和CMD中功能相同,用于切换工作目录。而实际上“cd”命令在PowerShell中是“Set-Location”命令的别名。

在PowerShell中使用alias命令可以查看一个函数的别名。

alias [command]

Windows命令行工具通用的命令在下面列出,你可以借助内建的帮助系统学习它们。

  • cls
  • ls
  • md
  • cd
  • cp
  • del
  • move

命令行工具的强大之处不在于上面列出的命令,那些操作通过文件资源管理器可以更轻松地完成。真正的强大之处在于命令行工具采用脚本语言,我们可以轻易地写出指导命令行工具执行特定任务的脚本文件——批处理文件和其他脚本文件。脚本文件的信息将在以后的博文中介绍。在这里,我们需要理解的是命令行中使用命令的方式。

发表评论

电子邮件地址不会被公开。 必填项已用*标注