1、计算机菜鸟金品第 - 1 - 页 共 8 页批处理深入剖析教程扩展名是 bat(在 nt/2000/xp/2003 下也可以是 cmd)的文件就是批处理文件。.bat 是 dos 下的批处理文件 .cmd 是 nt 内核命令行环境的另一种批处理文件 从更广义的角度来看,unix 的 shell 脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和
2、解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与 dos 的批处理却又完全不同。首先批处理文件是一个文本文件,这个文件的每一行都是一条 DOS 命令(大部分时候就好象我们在 DOS 提示符下执行的命令行一样) ,你可以使用 DOS 下的 Edit 或者 Windows 的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。批处理文件中完全可以使用非 dos 命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于 windows 系统这个新型解释平台的涉入,使得批处理的应用越来越“边缘化” 。所以我们讨论的批处理应该限定在 dos 环境或者命
3、令行环境中,否则很多观念和设定都需要做比较大的变动。其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto) 来控制命令运行的流程,在批处理中也可以使用循环语句(for) 来循环执行一条命令。当然,批处理文件的编程能力与 C 语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的 DOS 命令(包括内部命令和外部命令) ,而批处理的能力主要取决于你所使用的命令。批处理文件(batch file)也可以称之为批处理程序 (batch program),这一点与编译型语言有所不同,就 c 语言来说,扩展名为 c 或者 cpp 的文件可以称之为
4、c 语言文件或者 c 语言源代码,但只有编译连接后的 exe 文件才可以称之为 c 语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限计算机菜鸟金品第 - 2 - 页 共 8 页是比较模糊的。第三,每个编写好的批处理文件都相当于一个 DOS 的外部命令,你可以把它所在的目录放到你的 DOS 搜索路径 (path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个 bat 或者 batch 目录(例如 C:BATCH) ,然后将所有你编写的批处理文件放到该目录中,这样只要在 path 中设置上 c:batch,你就可以在任意位置运行所有你编写的批处理
5、程序。HK 小车:关于这里的 DOS 搜索路径我给大家做个介绍。当我们在“开始运行”的对话框中输入命令时其实是输入了要运行的文件的文件名。例如我们输入 CMD 后,系统会在设置的系统环境变量中搜索 CMD.EXE,如果这个可执行文件存在就运行这个文件,如果文件不存在则提示”Windows 找不到文件Hacker 。请确定文件名是否正确,再试一次”。等等我们再说环境变量时怎么回事,先说这个运行,从下图的运行界面我们可以看出运行其实就是打开本地或远程计算机算机上的指定文件,不要误以为运行的是DOS 命令,不妨可以在运行中输入一个 DOS 命令看看可不可以运行。计算机菜鸟金品第 - 3 - 页 共
6、8 页下面我们说说环境变量这个概念:百度百科概念:环境变量是一个具有特定名字的对象,它包含了一个或多个应用程序所将使用到的信息, 。例如 path,当要求系统运行一个程序而没有告诉程序所在的完整路径时,系统将在当前目录下寻找此程序外还将应到 path 中指定的路径去寻找,用户通过环境变量,来更好的运行程序。环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如我临时文件夹位置和系统文件夹位置等,这个有点类似于 DOS 时候的默认路径,当你运行某些程序时除了在当前文件夹中寻找外,还会到设置的默认路径去寻找,简单的说这里的 path 就是一个变量,里面存储了一些常用命令所存放的目录路
7、径。环境变量相当于给系统或用户应用程序设置的一些参数,具体起什么作用当然和具体的环境变量相关。 。比如 path,是告诉系统,当要求运行一个程序而没有指定这个程序的确切路径时系统不仅会在当前目录寻找还会在哪个路径寻找。当然 ,不仅仅是指定什么路径,还有其他作用,如 set dircmd= /4 设置一个环境变量的作用是在 dir 命令时会把/4 作为缺省的参数添加到你的 dir 命令之后,就像你的每个命令都加了/4 参数。它实际上就是给命令解释程序 command 设置的一个环境变量,并且给 dir 这个内部命令设置的。分析本地故障时很多就是因为环境变量的默认路径被删除的结果,默认路径一经设置
8、,当前系统如有程序运行时需要某些 dll 或 exe 文件 Active 控件时就会到默认路径下去寻找,如果在这写目录中查找到相应的程序则自动加载,查不到则报告缺少某些文件的错误信息。通过环境变量解决双系统的软件的共用问题很多朋友会在自己的电脑中装上双系统,如 c 盘装 xp D 盘装 win7.可是某些软件往往只在 xp 中安装,win7 中是无法正常使用的,比较麻烦却有效的办法就是再装一遍,当我们了解了环境变量的用途之后就可以很好解决双系统软件共存问题。为什么在 xp 中安装的软件在 win7 中无法正常使用呢,抛开注册表不说,原因就是安装软件时往往会向系统目录中写入某些文件,而使用另外一
9、个系统时会因为缺少这些文件而无法运行,因此我们可计算机菜鸟金品第 - 4 - 页 共 8 页以设置环境变量的方法来解决这个问题。环境变量的设置方法在 windows 操作系统中,我们可以通过我的电脑属性高级,来设置系统的环境变量,然而在此设置的环境变量是否在注册表中有对应的项呢,答案是肯定的。环境变量分为两类:用户变量和系统变量,在注册表中都有对应的项,其中用户变量存在于:HKEY_CURRENT_USEREnvironment系统变量存在于HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSession ManagerEnvironment 如图:计算机
10、菜鸟金品第 - 5 - 页 共 8 页下面我以 win7 为例将 d:batch 加入环境变量,以便于运行 bath 文件夹中的 bat 文件可以直接在运行中输入文件名运行。首先右击我的电脑选择属性,再选择系统高级设置(xp 直接选择高级选项卡就可以) 。计算机菜鸟金品第 - 6 - 页 共 8 页选择系统变量中的“PATH ”选择编辑,在原来的系统变量后面直接加英文分号后就可以将我们的变量加进去,切记不要删除原来的系统变量。设置完成后一路点击确定就可以了,我们只要在运行对话框中输入batch 中的文件就可以直接运行了。至此,环境变量介绍完成纯以 dos 系统而言,可执行程序大约可以细分为五类
11、,依照执行优先级由高到低排列分别是:DOSKEY 宏命令(预先驻留内存) ,COMMAND.COM 中的内部命令(根据内存的环境随时进驻内存) ,以 com 为扩展名的可执行计算机菜鸟金品第 - 7 - 页 共 8 页程序(由 直接载入内存) ,以 exe 位扩展名的可执行程序(由 重定位后载入内存) ,以 bat 位扩展名的批处理程序(由 解释分析,根据其内容按优先级顺序调用第 2,3,4,5 种可执行程序分析一行,执行一行,文件本身不载入内存)下面是 DOS 命令行或批处理中可能会见到的一些特殊标记符 : CR(0D) 命令行结束符 Escape(1B) ANSI 转义字符引导符 S
12、pace(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符 + COPY 命令文件连接符 * ? 文件通配符 “ 字符串界定符 | 命令管道符 文件重定向符 命令行回显屏蔽符 / 参数开关引导符 : 批处理标签引导符 % 批处理变量引导符其次, : 确实可以起到 rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 第一, 除了 : 之外 , 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号. 第二, 与 rem 不同的是 ,
13、 :后的字符行在执行时不会回显 , 无论是否用 echo on 打开命令行回显状态 , 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 : 更为适用; 另外, rem 可以用于 config.sys 文件中.call 调用另一个批处理文件(如果不用 call 而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当计算机菜鸟金品第 - 8 - 页 共 8 页前文件的后续命令) 。参数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟 0-9 中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a:
14、) 的关系类似于变量指针与变量值的关系 . 当我们要引用第十一个或更多个参数时, 就必须移动 DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似 C 语言中的指针操作.HK 小车:曾经我也对批处理很痴迷,因为他简单容易上手编写小的程序,但是网上找了很久没有找到真正具有实战性的文章,其实编程这个东西不是我们看看就可以的,需要我们亲手不断去实践,这样才能将自己学到的东西联系到实际应用中,不仅是编程如此,计算机学习本来就是这样,看看是不行的,好的教程你看的再多也不如自己亲手实践一下,还有一点很重要的就是我刚才说的找不到很理想的批处理教程供自己参考,但是我想我们应该去网上找别人写的批处理,看别人写的代码,这样也是一种很好的学习方法。批处理的精华部分我认为是 for、shift 这些关键字的使用,但是我没有给大家太多的介绍,因为我也是一个菜鸟,只能引导大家入门,具体的可以在 cmd 下打 for/?来查看其用法。以后我们应该经常用到系统帮助去看命令的用法。