在 Linux 上,创建shell 脚本来自动化重复性任务是很常见的。 类似地,在 FreeDOS(旧 DOS 操作系统的开源实现)上,您可以创建一个批处理文件,其中包含多个 FreeDOS 命令。 然后,您可以运行您的批处理文件以按顺序执行每个命令。
您可以使用 ASCII 文本编辑器(例如 FreeDOS Edit 应用程序)来创建批处理文件。 创建批处理文件后,您需要使用文件名和扩展名 .bat
保存它。 文件名应该是唯一的。 如果您使用 FreeDOS 命令名称作为自己的文件名,则可能会执行 FreeDOS 命令而不是您的批处理文件。
几乎所有内部和外部 FreeDOS 命令都可以在批处理文件中使用。 当您创建批处理文件时,您实际上是在编写程序。 FreeDOS 批处理文件可能没有结构化编程语言的功能强大,但它们对于快速但重复的任务非常方便。
为您的代码添加注释
任何程序员需要学习的首要好习惯是在程序中添加注释,以解释代码的作用。 这样做非常好,但您需要小心,不要愚弄操作系统来执行您的注释。 避免这种情况的方法是在注释行的开头放置 REM
(“remark”的缩写)。
FreeDOS 会忽略以 REM
开头的行。 但是,任何查看源代码(您在批处理文件中编写的文本)的人都可以阅读您的注释并理解它的作用。 这也是临时禁用命令而无需删除它的一种方法。 只需打开您的批处理文件进行编辑,在您要禁用的行开头放置 REM
,然后保存它。 当您想要重新启用该命令时,只需打开文件进行编辑并删除 REM
。 这种技术有时被称为“注释掉”命令。
准备就绪
在您开始编写自己的批处理文件之前,我建议在 FreeDOS 中创建一个临时目录。 这可以为您提供一个安全空间来尝试批处理文件,而不会意外删除、移动或重命名重要的系统文件或目录。 在 FreeDOS 上,您可以使用 MD
命令创建一个目录
C:\>MD TEMP
C:\>CD TEMP
C:\TEMP>
ECHO
FreeDOS 命令控制在您运行批处理文件时屏幕上显示的内容。 例如,这是一个简单的单行批处理文件
ECHO Hello world
如果您创建此文件并运行它,您将在屏幕上看到显示的句子。 最快的方法是从命令行执行此操作:使用 COPY
命令从键盘 (CON
) 获取输入并将其放入文件 TEST1.BAT
中。 然后按 Ctrl+Z 停止复制过程,然后按键盘上的 Return 或 Enter 返回到提示符。
尝试在您的临时目录中将此文件创建为 TEST1.BAT
,然后运行它
C:\TEMP>COPY CON TEST1.BAT
CON => TEST1.BAT
ECHO Hello world
^Z
C:\TEMP>TEST1
Hello world
当您想要显示一段文本时,这可能很有用。 例如,您可能会在屏幕上看到一条消息,告诉您等待程序完成其任务,或者在网络环境中,您可能会看到登录消息。
如果您想显示一个空行怎么办? 您可能会认为单独使用 ECHO
命令就可以做到这一点,但单独的 ECHO
命令会要求 FreeDOS 响应 ECHO
是打开还是关闭
C:\TEMP>ECHO
ECHO is on
获取空行的方法是在 ECHO
之后立即使用 +
号
C:\TEMP>ECHO+
C:\TEMP>
批处理文件变量
变量是临时存储您需要批处理文件记住的信息的位置。 这是编程的重要功能,因为您并不总是知道您希望批处理文件使用哪些数据。 这是一个简单的示例来演示。
创建 TEST3.BAT
@MD BACKUPS
COPY %1 BACKUPS\%1
变量通过使用百分号后跟一个数字来表示,因此此批处理文件在当前目录中创建一个 BACKUPS
子目录,然后将变量 %1
复制到 BACKUPS
文件夹中。 这个变量是什么? 这取决于您在运行批处理文件时决定什么
C:\TEMP>TEST3 TEMP1.BAT
TEST1.BAT => BACKUPS\TEST1.BAT
您的批处理文件已将 TEST1.BAT
复制到名为 BACKUPS
的子目录中,因为您在运行批处理文件时将该文件标识为一个参数。 您的批处理文件将 TEST1.BAT
替换为 %1
。
变量是位置性的。 变量 %1
是您提供给命令的第一个参数,而 %2
是第二个参数,依此类推。 假设您创建一个批处理文件来列出目录的内容
DIR %1
尝试运行它
C:\TEMP>TEST4.BAT C:\HOME
ARTICLES
BIN
CHEATSHEETS
GAMES
DND
这按预期工作。 但是这会失败
C:\TEMP>TEST4.BAT C:\HOME C:\DOCS
ARTICLES
BIN
CHEATSHEETS
GAMES
DND
如果您尝试这样做,您将获得第一个参数 (C:\HOME
) 的列表,但不会获得第二个参数 (C:\DOCS
) 的列表。 这是因为您的批处理文件只查找一个变量 (%1
),而且,DIR
命令只能接受一个目录。
此外,您在运行批处理文件时实际上不需要指定批处理文件的扩展名——除非您不幸地为批处理文件选择了一个名称,该名称与 FreeDOS 外部命令或类似命令之一匹配。 当 FreeDOS 执行命令时,它按以下顺序进行
- 内部命令
- 扩展名为 *.COM 的外部命令
- 扩展名为 *.EXE 的外部命令
- 批处理文件
多个参数
好的,现在重写 TEST4.BAT
文件以使用接受两个参数的命令,以便您了解这是如何工作的。 首先,使用 EDIT
应用程序创建一个名为 FILE1.TXT
的简单文本文件。 在其中放入某种句子(例如,“Hello world”),并将文件保存在您的 TEMP
工作目录中。
接下来,使用 EDIT
更改您的 TEST4.BAT
文件
COPY %1 %2
DIR
保存它,然后执行命令
C:\TEMP\>TEST4 FILE1.TXT FILE2.TXT
运行批处理文件后,您会看到 TEMP
目录的目录列表。 在列出的文件中,您有 FILE1.TXT
和 FILE2.TXT
,它们是由您的批处理文件创建的。
嵌套批处理文件
批处理文件的另一个功能是它们可以“嵌套”,这意味着一个批处理文件可以在另一个批处理文件中被调用和运行。 要了解这是如何工作的,请从一对简单的批处理文件开始。
第一个文件名为 NBATCH1.BAT
@ECHO OFF
ECHO Hello
CALL NBATCH2.BAT
ECHO world
第一行 (@ECHO OFF
) 静默地告诉批处理文件在您运行时仅显示命令的输出(而不是命令本身)。 您可能在之前的示例中注意到,有很多关于批处理文件正在做什么的反馈; 在这种情况下,您允许您的批处理文件仅显示结果。
第二个批处理文件名为 NBATCH2.BAT
echo from FreeDOS
使用 EDIT
创建这两个文件,并将它们保存在您的 TEMP 子目录中。 运行 NBATCH1.BAT
以查看会发生什么
C:\TEMP\>NBATCH1.BAT
Hello
from FreeDOS
world
您的第二个批处理文件通过 CALL
命令从第一个批处理文件中执行,该命令在您的“Hello world”消息中间提供了字符串“from FreeDOS”。
FreeDOS 脚本编写
批处理文件是编写您自己的简单程序并自动化通常需要大量打字的任务的好方法。 您使用 FreeDOS 的次数越多,您就越熟悉它的命令,一旦您了解了这些命令,就只需将它们列在批处理文件中,就可以让您的 FreeDOS 系统让您的生活更轻松。 试试看!
本文中的部分信息先前已在 DOS lesson 15: Introduction to batch files 和 DOS lesson 17: Batch file variables; nested batch files 中发布(两者均基于 CC BY-SA 4.0 许可)。
评论已关闭。