在 FreeDOS 上使用 BAT 文件自动执行任务

发布时间:2024-01-01 来源:杏彩app客户端下载

  本文是 FreeDOS 下批处理文件的实用指南。FreeCOM shell 可以做的不单单是为你提供一个命令行提示符让你在其中运行命令,如果你需要在 FreeDOS 上自动执行任务,你能够正常的使用 批处理文件,也称为 “BAT 文件”,因为这些脚本使用 .BAT

  即使你以前没用过 DOS,你也可能知道它的命令行 shell,即。它慢慢的变成了 DOS 的同义词,FreeDOS 为此也实现了一个类似的 shell,称为 “FreeCOM”,但也命名为,就像在其他 DOS 系统上一样。

  但是 FreeCOM shell 可以做的不单单是为你提供一个命令行提示符让你在其中运行命令,如果你需要在 FreeDOS 上自动执行任务,你能够正常的使用批处理文件,也称为 “BAT 文件”,因为这些脚本使用.BAT扩展名。

  批处理文件可能比你在 Linux 编写的脚本要简单得多。因为在很久以前,这个功能最初被添加到 DOS 时,它是为了让 DOS 用户“批量处理”某些命令。它的条件分支没有过大的灵活性,也不支持更高级的功能,例如算术扩展、标准输出和错误消息的重定向、后台进程、测试、循环(这项支持)和 Linux 脚本中常见的其他结构。

  本文是 FreeDOS 下批处理文件的实用指南。记住通过用百分号(%)包裹变量名称来引用环境变量,例如%PATH%。但是,请注意,由于历史原因,FOR循环的构造略有不同。

  批处理文件在大多数情况下要向用户打印消息,让用户知道发生了什么。使用ECHO语句打印消息。例如,一个批处理文件可能使用以下语句表明它已完成了任务:

  ECHO语句不需要引号。FreeCOMECHO语句不会以任何特殊方式处理引号,它会像普通文本一样打印它们。

  通常,FreeDOS 在执行批处理文件时会打印每一行。这在一个非常短的批处理文件中通常不是问题,它只为用户定义了几个环境变量。但是对于执行更多工作的较长批处理文件而言,批处理行的这种一直显示可能会变得很麻烦。要阻止此输出,在ECHO语句中使用OFF关键字,如下所示:

  大多数批处理文件在第一行包含一个ECHO OFF语句,以阻止消息,但是 shell 在执行语句时仍然会在屏幕上打印ECHO OFF。为了隐藏该语句,批处理文件通常在前面使用@符号。这样,任何以这个特殊字符开头的行都不会打印,即使打开了ECHO。

  编写较长批处理文件时,大多数程序员都喜欢使用注释来提醒自己这个批处理文件的用途。在批处理文件中注释,使用REM(remark)关键字。REM之后的任何内容都会被 FreeCOM shell 忽略。

  通常,FreeCOM 一次只运行一个批处理文件。但是,你在大多数情况下要使用另一个批处理文件来执行其他操作,例如为多个批处理文件设置公共环境变量。

  如果你从正在运行的批处理文件中直接调用第二个批处理文件,FreeCOM 将完全切换到第二个批处理文件,并停止处理第一个。要改为在第一个批处理文件“内部”运行第二个批处理文件,你需要告诉 FreeDOS shell 使用CALL关键字去调用第二个批处理文件。

  IF语句的一个常见用途是测试程序是否成功返回。如果它们正常运行,大多数程序将返回零值,或者在出现错误时返回一些其他值。在 DOS 中,这称为错误级别,这是IF测试的特例。

  测试名为MYPROG的程序是否成功退出,其实就是检查程序是否返回“零”。使用ERRORLEVEL关键字来测试特定值。例如:

  使用ERRORLEVEL测试错误级别是检查程序退出状态的笨拙方法。检查 DOS 程序的不同返回值,更有用的方法是使用 FreeDOS 为你定义的特殊变量,称为ERRORLEVEL。它存储了最近执行程序的错误级别,然后你能够正常的使用==测试不同的值。

  你能够正常的使用==和IF语句来测试变量是否等于某个值。就像一些编程语言,你能够正常的使用==直接比较两个值。通常,在一侧引用一个环境变量,在另一侧引用一个值,但你也可以比较两个变量的值以查看它们是否相同。例如,你可以使用此批处理文件重写上面的ERRORLEVEL代码:

  IF语句的另一个常见用途是测试文件是不是真的存在,如果存在则采取操作。你能够正常的使用EXIST关键字来测试。例如,要删除名为TEMP.DAT的临时文件,你可以在批处理文件中使用以下行:

  对于任何IF语句,你都能够正常的使用NOT关键字来否定测试。在文件不存在时打印消息,你能这样写:

  利用IF测试的一种方法是跳转到批处理文件中完全不同的部分,这取决于IF测试的结果。在最简单的情况下,如果一个关键命令失败,你可能希望跳到批处理文件的末尾。或者,如果某些环境变量设置不正确,你可能想要执行其他语句。

  你可以使用GOTO指令跳转到批处理文件的别的部分。它会跳转到批处理文件中称为标签的特定行。注意,这是一个严格的 “go-to” 跳转:批处理文件执行将在新标签处启动。

  假设程序需要一个现有的空文件来存储临时数据,如果文件不存在,则需要在运行程序之前创建一个文件。你可以将这些动作添加到批处理文件中,这样你的程序始终有一个临时文件可供使用:

  当然,这是一个格外的简单的例子。对这种情况,你可以重写批处理文件,将创建临时文件作为IF语句的一部分:

  如果你需要对一组文件执行相同的任务怎么办?你能够正常的使用FOR循环迭代一组文件。这是一个单行循环,每次使用不相同的文件运行单个命令。

  FOR循环对迭代变量使用一种特殊的语法,它的用法与其他 DOS 环境变量不同。要循环编辑一组文本文件,能够正常的使用以下语句:(LCTT 译注:原文此处写错了,少写了一个%)

  注意,如果在命令行中运行此循环,而不是在批处理文件中,那么迭代变量仅需要指定一个百分号(%):

  在运行批处理文件时,FreeDOS 提供了一种简单的方法来检测用户可能提供的命令行选项。FreeDOS 解析命令行输入,并将前九个选项存储在特殊变量%1、%2..... 等中,直到%9。注意,无法通过这一种方式直接访问第十一个(及之后)选项。特殊变量%0存储批处理文件的名称。

  如果你的批处理文件需要处理 9 个以上的选项,你能够正常的使用SHIFT语句移除第一个选项,并将每个选项向下移动一个值。所以第二个选项变成了%1,第十个选项变成了%9。

  大多数批处理文件只需要移动一个值。但是,如果你需要以其他增量进行移位,可以将参数提供给SHIFT语句。例如:

  执行带有十个选项的批处理文件显示了SHIFT语句如何重新排列命令行选项,因此批处理文件现在可以用%9访问第十个参数:

  今天我们要介绍的 pkg-config,为解决以上问题提供了一个优美方案。从此,你再也不为此担忧了 ...

  chkconfig在命令行操作时会经常用到。它可以方便地设置和查询不同运行级上的系统服务。这个可要好好掌握,用熟练之后,就可以轻轻松松的管理好你的启...

  今天小编为大家带来的是linux下卸载vmware产品的方法,希望对大家会有帮助,有需要的朋友一起去看看吧...

  越来越多的站长,开始使用独立主机(Dedicated Host)和 VPS。而为了节约成本或提高性能,不少人的独机和 VPS,都是基于 unmanaged 的裸机,一切都要自己 DIY。这...

  PUTTY默认不支持记住密码,修改版的还是不要用,好在SSH支持证书登陆,我也问了生产环境下的朋友,他们登陆SSH也是用证书. ...

  这篇文章主要介绍了什么是运维?运维工种有哪些?本文讲解了运维的概念、运维的工作范畴、运维的工作分类等内容,需要的朋友可以借鉴下 ...

  curl 是 Linux 系统上一款网络工具,它的首字母 c 代表的是 client,表示它是客户端程序。通过 URL 方式,能轻松实现客户端和服务器之间传递数据。...