范例
当前位置:首页 > 其他范文 > 范例 > 列表页

写批处理文件的范例

小草范文网  发布于:2016-10-13  分类: 范例 手机版

篇一:关于批处理文件编写的入门方法-带实例

批处理文件BAT的命令

bat是dos下的批处理文件

.cmd是nt内核命令行环境的另一种批处理文件

从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。

===================================

首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

==== 注 ===================

批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。

========================

其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。

==== 注 ==================

批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。

===========================

第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。

==== 注 =====

纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻内存),以com为扩展名的可执行程序(由command.com 直接载入内存),以exe位扩展名的可执行程序(由command.com 重定位后载入内存),以bat位扩展名的批处理程序(由command.com 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存)

============

第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:

@ECHO OFF

PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;

C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH

LH SMARTDRV.EXE /X

LH DOSKEY.COM /insert

LH CTMOUSE.EXE

SET TEMP=D:\TEMP

SET TMP=D:\TEMP

==== 注 =====

AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行;

而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。

==== willsort 编注 =============

以下关于命令的分类,有很多值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为"批处理命令"。

以下摘录MS-DOS 6.22 帮助文档中关于"批处理命令"的文字,当然,其中有些概念和定义已经有些落后了。

批处理命令

批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。

任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。

==========

常用命令

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。

==== 注 ===========

首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令

行或批处理中可能会见到的一些特殊标记符:

CR(0D) 命令行结束符

Escape(1B) ANSI转义字符引导符

Space(20) 常用的参数界定符

Tab(09) ; = 不常用的参数界定符

+ COPY命令文件连接符

* ? 文件通配符

"" 字符串界定符

| 命令管道符

< > >> 文件重定向符

@ 命令行回显屏蔽符

/ 参数开关引导符

: 批处理标签引导符

% 批处理变量引导符

其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:

第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.

第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中.

=====================

echo 表示显示此命令后的字符

echo off 表示在此语句后所有运行的命令都不显示命令行本身

@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。

pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续

rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。 ==== 注 =====

此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理

-------------------------

ECHO

当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。

在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。

使用ECHO命令可关闭此功能。

语法

ECHO [ON|OFF]

若要用echo命令显示一条命令,可用下述语法:

echo [message]

参数

ON|OFF

指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO

命令。

message

指定让MS-DOS在屏幕上显示的正文。

-------------------

CALL

从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。

语法

CALL [drive:][path]filename [batch-parameters]

参数

[drive:][path]filename

指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。

batch-parameters

指定批处理程序所需的命令行信息。

-------------------------------

PAUSE

暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处

理程序中使用该命令。

语法

PAUSE

REM

在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS 中也可以用分号 ; 代替REM命令,但在批处理文件中则不能替代)。

语法

REM [string]

参数

string

指定要屏蔽的命令或要包含的注解。

=======================

例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。

批处理文件的内容为: 命令注释:

@echo off 不显示后续命令行及当前命令行

dir c:\*.* >a.txt 将c盘文件列表写入a.txt

call c:\ucdos\ucdos.bat 调用ucdos

echo 你好 显示"你好"

pause 暂停,等待按键继续

rem 准备运行wps 注释:准备运行wps

cd ucdos 进入ucdos目录

wps 运行wps

批处理文件的参数

批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符"%"。

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

例2:C:根目录下有一批处理文件名为f.bat,内容为:

@echo off

format %1

篇二:教你怎么写批处理

扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。

首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。

第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。

第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:

@ECHO OFF

PATH

C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH

LH SMARTDRV.EXE /X

LH DOSKEY.COM /INSERT

LH CTMOUSE.EXE

SET TEMP=D:\TEMP

SET TMP=D:\TEMP

批处理的作用

简单的说,批处理的作用就是自动的连续执行多条命令。

这里先讲一个最简单的应用:在启动wps软件时,每次都必须执行(>前面内容表示DOS提示符):

C:\>cd wps

C:\WPS>spdos

C:\WPS>py

C:\WPS>wbx

C:\WPS>wps

如果每次用WPS之前都这样执行一遍,您是不是觉得很麻烦呢?

好了,用批处理,就可以实现将这些麻烦的操作简单化,首先我们编写一个runwps.bat批处理文件,内容如下:

@echo off

c:

cd\wps

spdos

py

wbx

wps

cd\

以后,我们每次进入wps,只需要运行runwps这个批处理文件即可。

常用命令

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。

echo 表示显示此命令后的字符

echo off 表示在此语句后所有运行的命令都不显示命令行本身

@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。

pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续

rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。

例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。

批处理文件的内容为:命令注释:

@echo off 不显示后续命令行及当前命令行 dir c:\*.* >a.txt 将c盘文件列表写入a.txt

call c:\ucdos\ucdos.bat 调用ucdos

echo 你好显示"你好"

pause 暂停,等待按键继续

rem 准备运行wps注释:准备运行wps

cd ucdos进入ucdos目录

wps运行wps

批处理文件的参数

批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

例2:C:根目录下有一批处理文件名为f.bat,内容为:

@echo off

format %1

如果执行C:\>f a:

那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:

例3:C:根目录下一批处理文件名为t.bat,内容为:

@echo off

type %1

type %2

那么运行C:\>t a.txt b.txt

%1 : 表示a.txt

%2 : 表示b.txt

于是上面的命令将顺序地显示a.txt和b.txt文件的内容。

特殊命令

if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。

一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:

1、if [not] "参数" == "字符串" 待执行的命令

参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。

例:if "%1"=="a" format a:

2、if [not] exist [路径\]文件名 待执行的命令

如果有指定的文件,则条件成立,运行命令,否则运行下一句。

如: if exist c:\config.sys type c:\config.sys

表示如果存在c:\config.sys文件,则显示它的内容。

3、if errorlevel <数字> 待执行的命令

很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。

如if errorlevel 2 goto x2

二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。

如:

goto end

:end

echo this is the end

标号用“:字符串”来定义,标号所在行不被执行。

三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。

注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。

choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:

该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

参数列表:

/C choices 指定要创建的选项列表。默认列表是 "YN"。

/N 在提示符中隐藏选项列表。提示前面的消息得到显示,

选项依旧处于启用状态。

/CS 允许选择分大小写的选项。在默认情况下,这个工具

是不分大小写的。

/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0

到 9999。如果指定了 0,就不会有暂停,默认选项

会得到选择。

/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选

项指定的一组选择中; 同时,必须用 /T 指定 nnnn。

/M text 指定提示之前要显示的消息。如果没有指定,工具只

显示提示。

/? 显示帮助消息。

注意:

ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选 择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,

该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的

ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降 序排列。

示例:

CHOICE /?

CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"

CHOICE /T 10 /C ync /CS /D y

CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"

CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"

如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。" 屏幕上会显示:

确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?

例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):

@echo off

choice /C dme /M "defrag,mem,end"

if errorlevel 3 goto end

if errorlevel 2 goto mem

if errotlevel 1 goto defrag

:defrag

c:\dos\defrag

goto end

:mem

mem

goto end

:end

篇三:批处理实例

一、编写第一个作品:文件列表器

打开记事本,按照图1所示输入其中命令,完成后将其保存为file.bat,并放置到你的个人数据文件夹(比如:D:\data)中,运行这个批处理文件后,会自动生成一个名为list.txt的文件,里面有所有TXT、DOC、XLS文件的详细列表。

小提示

玩批处理的要点

★在批处理运行中,只要按Ctrl+C或Ctrl+BackSprce组合键就可以结束它,请牢记这两个组合键,因为当你做出一个死循环批处理后,它们是你的“救命稻草”。

★写批处理时最好在开始写上注释文字,从而让自己和别人都知道这个批处理的作用。 ★凡是命令中有FORMAT、DEL之类格式化、删除命令,最好特别小心,如果书写错误,很可能会将你的重要数据删除。

★文章中许多实例都涉及到了带%的变量,如果直接在DOS窗口中运行,那么只要输入一个“%”,如果写在批处理文件中,那么就得将其变成“%%”。

二、快速初识批处理

批处理是DOS 1.0开发到最后时刻才诞生的,IBM告诉微软,他们需要用一些方法来一次又一次测试生产出来的PC,所以希望能够有一种方式使电脑自动运行一批命令,而不用人工一次次输入,于是微软就通过建立批处理文件来实现这个意图。

在后来出现的DOS操作系统里,这种自动化被更好地体现出来。DOS系统允许用户使用任何一种文本编辑器将多条DOS命令按某种顺序以ASCⅡ文本形式写入一个扩展名为BAT(MS-DOS批处理)或CMD(Windows NT命令脚本)的文件中,当在命令提示符下键入文件名并回车,或在Windows环境中双击该文件时,系统会调用command.com或cmd.exe由前向后依次来自动执行这些命令。这个命令集合就是批处理,它是DOS下可执行文件的一种。一个完整的批处理由至少一条可以被正确执行的DOS命令组成,可见DOS命令是批处理的核心。

也有一种说法,把批处理称做“脚本”,或合起来称为“批处理脚本”,这也是合理的。批处理和脚本有一个共同点,它们都是通过一组命令的正确执行来实现自身价值,不同之处在于,批处理使用的全部为DOS命令,而在脚本中可以使用应用程序的指令;脚本程序性强于批处理,批处理程序结构比较简单。

Just Do It

在运行刚才制作的批处理文件时,你会发现,每次运行后,list.txt中都会重复添加已有的文件列表,这样在实际使用时会比较麻烦,请将其修改一下:

::文件列表器

::可以将文件夹中的个人数据文件(比如:TXT、DOC、XLS等文件)写入列表文件中。 @echo off

if exist list.txt del list.txt

FOR /R %%C IN (*.TXT *.DOC *.XLS) DO echo %%~fnC >>list.txt

这样你会发现,每次的list.txt都是最新的文件列表,而且运行时出来的命令执行情况显示也没有了。

小提示

请教Windows中的黑脸老师

DOS命令并不像Windows程序那样直观,它往往要配合许多参数和固定的书写方法才能发挥作用,除了请教身边高手或是在网上求助外,建议最好事先问问Windows中的黑脸老师,

打开命令行提示符,输入“命令 /?”,回车后,详细的答案就会全部列出来(见图2)。另外,对于Windows 2000/XP,也可以试试白脸老师——“帮助”,打开后,在“搜索”选项卡中输入命令,回车后即可找到结果,内容和黑脸老师讲的都一样。

三、掌握批处理的基本编程命令

1.@命令

“@”符号是E-mail的专用符号,它在批处理中的作用是让系统在执行批处理命令时不显示该行命令本身。也就是如果你把它放在一行命令的前面(比如:@if exit list.txt del list.txt),那么这行命令在执行过程中就不会显示了。但如果每行都加上这个命令,不仅费事,而且有些多余,因此它常常和后面的“echo off”配合使用。

2.echo命令

其主要作用是来确定批处理在执行时显示或不显示它后面所有命令本身,而只显示执行后的结果或其他信息,一般出现在批处理第一行,“echo”和“@”命令的区别在于前者关闭了所有命令显示,而后者只关闭其中一条。而“echo on”显示命令执行已经很少有人用了。

在批处理文件中,“@echo off”这个组合使用非常频繁,它达到了两个目的:“@”使“echo off”命令不显示,而“echo off”确保了后面每行命令的执行过程都不显示。

小提示

“echo”命令还有其他特别用法,比如用来在批处理执行过程中显示一段信息,用法为“echo

[消息内容]”,这样“echo”后面的所有内容将被显示到屏幕上。

另外,这个命令还可以结合管道命令将显示信息写进某个文件,比如前面实例中的“echo %%~fnC >>list.txt”。

3.::和rem命令

::和rem命令的作用和用法都完全一样,用来在批处理中做注释,增加程序可读性,这是一个值得提倡的好习惯。它们后面跟随的语句不会在执行时显示或被执行。

4.pause命令

该命令在批处理中使用十分广泛,其作用是暂停批处理的执行,直到用户按下键盘上的任意键(Break键除外)。批处理在执行过程中显示的所有信息都是一闪而过的,只有当用户暂停执行时,才能看到当前屏幕上的信息。当程序要让用户看一段信息,或要给用户时间去考虑某个问题时,就可以在这里加上一个pause,批处理执行到这里时将显示“按任意键继续”的信息。用法很简单,直接在要暂停的地方使用pause命令即可。

5.call命令

该命令是用来从一个批处理中调用另一个批处理的,用法为:CALL [驱动器][路

写批处理文件的范例

径]批处理名

[参数]。使用此命令,可以实现多个批处理互相调用,类似于程序中各个模块之间的互相调用。在后面实例中,你可以亲自体验一下这个命令。

6.:和goto命令

这是两个成对出现的命令,在任何一个批处理中有多少个“:”就一定至少有多少个“goto”。“goto”命令的作用,是告诉程序并不按顺序向下执行,而是要跳转到另一个地方,而“:”命令则惟一标记了“goto”命令要跳转的地址。简单说,“goto”是个跳转命令,而“:”是一个标签。当批处理运行到“goto”时,将自动跳转到“:”所标记的地方去执行。

小提示

“goto”命令的标签长度不能超过8个字节,否则可能会出错,比如“thistest0”和“thistest”的效果是一样的,批处理只取前8个字节,即“thistest”。

四、批处理命令的精髓:if和for

if和for是批处理中的复杂编程命令,它们本身比较难掌握,但功能强大,在批处理中应用十分广泛,是批处理中各种重要功能实现的基础。熟练掌握这些命令才可以让写出的批处理实现想要的功能。

1.if命令

懂得编程的朋友都知道,“if”命令在各种程序中都有使用,而且用得十分普遍。在批处理中,“if”命令和其他程序语言中的作用基本一样,都是代表“如果……就……”,是一个选择判断命令,或者说条件命令。在批处理中,“if”命令的使用也十分普遍,凡是牵扯到分支结构的地方都要使用该命令。

if命令一点通

if命令判断程序执行时条件是否满足,如果满足就执行一个操作,不满足就执行另一种操作,条件可以是单个,也可以是多个的。根据if命令判断的对象,可将其分为三类:

输入判断:IF [NOT] 参数==字符串 command

存在判断:IF [NOT] EXIST filename command

结果判断:IF [NOT] ERRORLEVEL number command

说明:也可以在if后面仅跟一个not来判断“如果不……就……”,用法跟“如果……就……”的用法一样,本文不另做介绍。

入门实例1:解读Ghost自动备份和恢复系统

学习重点:if命令的“输入判断”。

实现功能:通过对Config.sys和Autoexec.bat文件的编辑,可以让你轻松实现Ghost自动备份和恢复系统的功能。

在第18期《玩转Ghost 重装系统不求人》中我们介绍了如何打造Ghost自动备份和恢复系统,而它恰恰使用了if命令的输入判断,现在我们来解读一下:

在Config.sys文件中,首先使用[Menu]来显示下面的选择菜单:

1.Backup your system.

2.Restore from HD.

接着在Autoexec.bat文件中,写入了相应if语句:

其中“"%config%"”是参数,指Config.sys中设置的Menu,如果输入1,也那么就是选择[Menu]下的“Clone,Backup your system.”(“,”后面为显示文字,你可以随意修改,比如改为“bei fen wo de Windows”)。

语句翻译:这段if语句如果翻译成日常用语,应该是:

如果你按下1键,也就是选择了Clone(菜单显示的“Backup your system.”),那么会直接进入“Clone”部分,并执行其下的Ghost命令来备份系统。

如果你按下2键,也就是选择了RestoreHD(菜单显示的“Restore from HD.”),那么会直接进入“RestoreHD”部分,执行其下的Ghost命令来恢复系统。

Just Do It

请在显示的菜单中添加“back to DOS”,选择后自动返回DOS。

★在Config.sys文件的[Menu]下应添加:

menuitem=NO, back to DOS.

并在下面适当位置添加以下命令:

[NO]

device=himem.sys /testmem:off

★在Autoexec.bat文件中添加以下语句:

IF "%config%"=="NO" GOTO QUIT

在下面适当位置添加:

:QUIT

echo To get help, type HELP and press ENTER.

echo.

rem clean up environment variables

set CDROM=

set LglDrv=

入门实例2:文件自动分类保存

学习重点:if命令的存在判断

实现功能:对于平时整理个人数据非常有帮助,能够自动将同一类文件复制到特定文件夹中。 请在D盘新建data目录,接着再新建txt子目录。

::文件自动分类

::让文本文件自动移动到TXT文件夹

if exist *.txt move *.txt D:\data\txt

保存为movetxt.bat,放在D:\data文件夹中,复制包含TXT文件在内的一些文件到这个文件夹中,接着运行这个批处理,你会发现所有TXT会自动移动到TXT子文件夹中。 语句翻译:如果当前文件夹中存在TXT文件,将它们全部移动到D:\data\txt文件夹中。 Just Do It

扩展这个批处理文件,使其能自动将DOC文件移动到WORD文件夹,XLS文件移动到Excel文件夹。

小提示

if命令的存在判断不能用来判断一个目录是否存在,只能判断文件,但在每个目录下都存在空设备,因此可以使用判断空设备是否存在的方式来间接判断目录是否存在。方法为:IF

[NOT] EXIST [drive:][path]\nul command。例如:if not exist e:\tools\con md e:\tools,如果不存在e:\tools这个目录就新建立一个。

进阶实例1:冰河木马检查器

打开“记事本”,输入以下命令,将其保存为binghe.bat(语句中的①、②、③不用输入): @echo off

netstat -a -n > a.txt①

find a.txt "7626"②

if errorlevel 2 (

echo You have infected GLACIER!

) else (

echo Congratulations! No GLACIER!③

)

del a.txt & pause

运行后,如果显示“You have infected GLACIER!”,说明你中了冰河,需要使用相关工具进行清查,如果显示“Congratulations! No GLACIER!”则说明没有问题。并且自动删除生成的a.txt文件。

语句翻译:这里使用了if命令的结果判读,它是if命令三种判断中最重要的一种。由于DOS命令在执行完毕后都会给系统一个返回值,用来表示执行结果。在if命令中设置一个比较值,如果返回值大于或等于比较值就继续执行,否则就退出if命令。

①显示出你的电脑当前所开放的所有端口及所有已建立的有效连接,并输出到式a.txt文件中)

②在a.txt文件中用“7626”作为关键词查找,因为冰河会打开多个7626端口

③如果检查结果等于或大于2,表示find命令找到特定字符串,就会执行第一个echo命令,否则就执行else后面的echo命令。

2.for命令

for命令是批处理中最具程序特点、也是最强大的命令之一,它是一个循环命令,用来对多个目标执行同一个操作,通常情况下是对一个或一组文件中的每一个对象进行定义的操作,直到所有对象都执行这一操作完成,或被强制终止。

特别提醒:在下面的实例操作中,请特别体会和注意for语句的循环操作,也就是一个接一个执行。

for命令一点通

基本用法:for %variable in (set) do command

简明实例:for %a in (*.tmp) do del %a

快速翻译:“%a”表示变量,它是由(*.tmp)来进行定义的,在这里变量就是所有TMP文件,而“do”(做)后面是删除操作。整体翻译过来就是,首先告诉for命令“%a”变量就等于所有TMP文件,后面只要一说“%a”就是说所有TMP文件,接下来就是一个接一个地删除TMP文件,直到删除完为止。

特别说明:“in”和“do”为该命令中必不可少的关键字;变量可以使用除%0~%9以外的所有数字和字母,例如%i,但变量有大小写之分,%i不等于%I;另外,如果直接在DOS窗口中运行for命令,那么变量前只要一个%符号即可,如果写成批处理文件,那么就得加两个%符号,否则会提示出错。如%%i。

小知识

什么是变量?

变量在编程中经常被用到,因为它不是固定的,而是根据用户的设置或输入内容不断变化着,所以叫变量。在for命令中,它会根据后面(set)中定义的内容而变化。举个通俗的比喻,变量就像是火车上的座位,它并不属于任何人,如果你一旦坐在某个座位上(比如1号),那么在你下车前,这个座位便和你联系在一起了,大家一叫1号座位的同志,也就是在叫你。但当你下车后,1号座位便和你没有联系了。

本文已影响