这里,我将介绍批处理脚本语言及其在MS-DOS命令提示符中的历史起源,以及包含其源代码的两种类型的文件:bat和cmd。我还将讨论编辑器,它是编写bat文件的主要工具,以及可供您使用的选项。最后,如果没有对解释器的概述,对批处理领域的介绍就不完整。

MS-DOS命令提示符

每一台装有微软Windows的计算机上都自带MS-DOS命令提示符,如果你几十年前接触过电脑的话,你可能还使用过黑色的矩形来操作电脑,在那里你输入命令来执行各种任务,比如安装或启动程序,或者复制或删除文件。现在作为普通用户很少会这些操作的,因为图形用户界面已经简化了这些任务,因此只需点击几下即可执行,但是命令行依然是存在的。

要访问Windows计算机上的命令提示符,请在开始中的搜索框输入CMD,这是命令的缩写。按ENTER, MS-DOS命令提示符将打开。从这个提示符中,您可以输入一些命令。您可以执行程序,复制文件,甚至删除整个C:\driver。不过,不要惊慌;我们这里先不会介绍具体的命令行。

这里我们先介绍一个案例让你感受下命令行的魅力:假设你正在处理一个文件夹,文件夹中有几个文档。当你每天花几个小时处理了这些文件后,需要将文件备份到另一个盘符中。为此,您可以在命令提示符中输入以下的单个命令并按enter。

> xcopy C:\项目文件夹\*.* D:\备份项目文件夹\ /F /S /Y

这里我们先不要担心每个字母都是什么意思,我们后面会具体介绍的。重要的一点是你可以每天在命令提示符中输入这个命令来复制你所有的文件。但是您可能会抗议说,在这一行中很容易输入错误的内容,例如行尾斜杠后面的两个路径之一或其中一个字母,不管这些字符是干什么用的。使用Windows不是更容易吗?我们可以打开一个文件夹,选择所有文件夹,右键单击,选择复制,然后打开另一个文件夹,右键单击,选择粘贴。我同意这样做要比输入命令简单,但请注意,Windows的操作过程包括多个个独立的步骤,可能需要十几次甚至更多的鼠标点击。

除了上面两种方式,我们还有第三种方式,第三种方法比命令提示符和多次点击鼠标更容易的方式。那就是使用批处理进行编程的方式。

批处理脚本语言

批处理是一个通用术语,一般指的是同时运行多个作业或大量数据的行为,他与我们这里介绍的批处理脚本(Batch scripting)是截然不同的。

微软在20世纪80年代早期为MS-DOS操作系统开发了批处理脚本或编程语言,自1985年以来,它已安装在每台运行Windows的机器上。批处理命令本身代表了编程语言Batch的起源,但是单个命令不构成语言;语言是执行这些命令的框架。将这些命令组合到一个文件中可以实现分支逻辑、复杂循环和可重用代码——这才是真正的语言的组成部分。

批处理有很多用途。它的命令行起源使它成为计算机或系统管理的理想语言:创建、复制、移动和删除文件。批处理还可以检查和修改目录和注册表,并设置计算机的环境。

一个简单的bat文件可以设置一些变量并执行用许多其他语言编写的程序。批处理可以与用户交互,显示信息和收集数据。文件可以被读、写和修改。可以创建基本的报告,后面我们将编写一些批处理以支持复杂的逻辑和复杂的脚本。

在个人电脑出现之前,其他操作系统都有自己的脚本语言,类似于批处理。Unix shell脚本在基于Unix的操作系统上执行,JCL或作业控制语言对IBM大型机非常有用。

根据我的经验,编码人员对批处理的了解广泛而浅薄。大多数编码人员可以创建一个简单的批处理应用程序,但对于更复杂的问题,本能地退回到其他语言,这些问题可以更容易地在批处理中处理。

bat文件

尽管批处理这个术语有歧义,但大多数编码人员都知道bat文件。将一批命令输入到一个批处理文件(简称为bat文件)中。因此,bat文件是包含批处理源代码的文件。当一个bat文件被执行时,它所包含的一系列命令将被执行,直到到达终止其执行的命令或到达文件的末尾。

大多数Windows文件在文件名末尾的点之后都有一个文件扩展名。现代Word文档以*.docx结尾。Excel电子表格以.xlsx结尾。简单的文本文件通常以.txt结尾,PDF文件以…结尾。为了区分bat文件和其他文件,它的扩展名必须是.bat*。

在Windows中,默认情况下,文件扩展名不会显示在文件名之后,但我们需要它们。要显示它们,请在Windows资源管理器的“视图”菜单下查找显示文件名扩展名的选项。如果不是很明显,在网上搜索“显示文件扩展名”和你的操作系统。

你的第一个Bat文件

让我们创建一个bat文件。我们右键单击桌面调出上下文菜单并选择新建文本文档。将文本文件重命名为SaveProject.bat的文件。名称可以是任何对您有意义的名称,但是文件名之后的文件扩展名必须从*.txt更改为.bat*。右键单击该文件,选择“重命名”,输入新的名称和扩展名,按“Enter”建。弹出窗口可能会警告您更改扩展可能会造成很大的危害。不用管他,直接选择“是”确认即可。右键单击桌面上的新文件,选择编辑(不是打开)。他将在记事本中打开以进行编辑。

我们输入以下两行文本:

xcopy C:\YourPath\*.* D:\YourBackUpPath\/F /S /Y
pause

将“C:\YourPath\”更改为要备份的文件夹,将“D:\YourBackUpPath\”更改为要保存所有文件的文件夹。若您的电脑上没有C盘和D盘,也可将其替换为您电脑上存在的盘符名称。

当您将来想要进行此备份时,只需执行此bat文件。要做到这一点,你有多种选择;一种是双击桌面上的图标,另一种是右键单击bat文件,选择“打开”。您可能期望打开文件进行编辑,但它实际上执行的是bat文件。

就是这样,将打开一个窗口,显示所有复制的文件以及它们被复制的位置。bat文件将保持窗口打开,直到您按下任何键关闭它。如果没有这个(pause),复制仍然会发生,但是窗口可能会很快关闭,您无法知道它是否有效。

警告:

有时Windows文件关联分配不正确。也就是说,Word文档应该与Word相关联并由Word打开。同样,bat文件应该与执行bat文件的Windows程序相关联。例如,如果您的bat文件在记事本中打开,则具有.bat扩展名的文件的文件关联被破坏。修复方法因操作系统而异。在网上搜索“bat文件关联修复”以及您的操作系统,以了解如何解决这个问题。

几乎任何你可以在MS-DOS命令提示符中输入的东西都可以被编码到一个bat文件中,这样它就可以很容易地重复执行。你不需要从网上下载任何东西。你需要的一切都已经在你的Windows电脑上了。

我在最后一段前面加上了“几乎”,因为某些命令,特别是最重要的命令,在bat文件中与命令提示符中的语法略有不同。更奇怪的是,与在命令提示符下输入完全相同的命令相比,bat文件中的命令偶尔会产生略有不同的输出。

我们的目的是编写bat文件,而不是使用命令提示符,因此后续的所有代码都可以在bat文件中工作,并且所有输出示例都是来自bat文件的代码输出。

cmd文件

在前面我们创建了一个扩展名为.bat的bat文件。随着Windows NT的发布,微软引入了一个非常类似的文件,扩展名为.cmd,该文件也包含批处理源代码。bat文件中的任何批处理命令都可以输入cmd文件。如果我们使用用.cmd扩展名重命名前面的第一个bat文件,并像执行bat文件一样执行它,业课得到相同的结果。

在计算机如何执行这两种类型的文件方面存在一些技术差异,但从用户的角度来看,它们几乎是相同的。唯一重要的区别是关于如何以及何时设置返回代码,即使这样,这种差异也只在非常有限的情况下表现出来。

编辑器推荐

前面提到过,当您编辑第一个bat文件时,它可能会在记事本中打开。记事本是最简单的文本文件编辑器,但其缺乏一些有用的功能。它可以用于一个简单的bat文件,但在我们进一步讨论之前,我必须说明需要一个更好的编辑器。我所说的编辑器是指允许您在窗口中打开(而不是执行)bat文件以读取它并进行修改的实用程序。

我个人最喜欢的是Notepad++。第一次听到这个名字时,我误以为它是美化的记事本,但它确实很好用。命令、变量、操作符、标签、注释和更多我们还没有涉及到的项目都以不同的颜色显示,以帮助提高可读性。大多数编辑器都有这个功能,但是如果双击一个变量,它不仅会突出显示该变量,还会突出显示文件中该变量的所有其他实例,从而更容易发现拼写错误,尽管由于Notepad++易于使用的自动完成功能,拼写错误在Notepad++中并不常见。

Notepad++是可配置的。如果你发现变量的橙色有点太刺眼了,你可以把它改成焦橙色或者淡紫色。它也适用于许多其他编程语言,最重要的是,它是免费的。只要去https://notepad-plus-plus.org或在网上搜索“notepad++下载”,点击几下鼠标就可以了。

UltraEdit也是一个可靠的编辑器,而Visual Studio Code正迅速成为许多编码语言(包括批处理)非常流行的编辑器。你可以在网上找到其他一些,其中许多是免费的。下载两个或三个并进行试验,但无论你做什么,都不要满足于使用记事本。

批处理解释器

批处理是一种脚本语言,而不是编译语言。编译语言,如Java、Visual Basic和c#是用文本编写的,但这些文本不能被执行。相反,他们通常在集成开发环境(IDE)中编写程序,在IDE中单击一两个按钮就可以运行编译,将代码转换为可执行文件。生成的文件根本不是人类可读的,但它将是计算机可读的,并为执行进行了优化。缺少可读文本还有一个额外的好处,那就是对用户隐藏了任何专有信息。

这个编译后的文件下一步是运行;运行时有不同的形式,但运行时加载在计算机上,用于运行用特定语言编写的任何可执行文件。

作为一种脚本语言,批处理也是用文本编写的,但是该过程的其余部分与编译语言有很大的不同。他没有编译器,也没有运行时;相反,批处理解释器或cmd.exe可执行文件可以有效地代替这两个角色(编译、运行)。批处理解释器有时被称为命令解释器或命令行解释器,但通常它被简单地称为解释器。

解释器执行包含文本的bat文件。缺少中间编译步骤确实有一些优点。因为代码没有被编译,但它也给程序员带来了一些挑战。当程序被编译时,编译器会捕获语法错误,甚至提出如何改进代码的建议。例如,编译器可以很容易地捕捉到遗漏的圆括号,这样在IDEA中就可以在几秒钟内修复它。bat文件中缺少的字符直到解释器执行时才会被捕获,甚至可能在它第一次执行时也不会被捕获。通过这种方式,解释器扮演了编译器(效率非常低的编译器)所扮演的角色之一。

解释器更类似于运行时。当前面的bat文件被打开或执行时,会向解释器发出一个调用来读取bat文件并逐行执行它或解释它。这意味着bat文件没有针对执行进行优化,无论好坏,任何使用Notepad++的用户都可以使用该代码。此外,bat文件可以在任何Windows机器上执行,因为所有这些机器都装载了解释器。

所有现代的ide都有一个调试器,它允许你逐行执行代码,分析变量,甚至可能修改它们。您可以将执行设置为停止某一行或多行。这是一个非常有用的工具,但批处理不支持调试。bat文件的生命周期为:写入,执行。

一些脚本语言(如JavaScript)通常是双向的——源代码可以在解释器中运行,也可以与其他产品一起编译成可执行文件。这样的事情在批处理中是不常见的。Bat文件只能通过解释器运行,所以理解解释器是什么很重要。

总结

在本文中,我们介绍了批处理脚本语言、bat文件、cmd文件和解释器。您编写并执行了一个bat文件(可能是您的第一个文件),并了解了编辑器。现在,您已经准备好真正开始编码了。在下一篇中,我们将学习如何使用常用的set命令为变量赋值,以及如何解析或提取这些值。我们还将熟悉批处理中广泛使用的其他一些命令,为将来构建任何bat文件奠定必要的基础。

本文由博客一文多发平台 OpenWrite 发布!