批处理(Batch)是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND.COM或者CMD.EXE)解释运行。类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用if,for,goto等命令控制程序的运行过程,如同C,Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何32位的Windows程序都可以放在批处理文件中运行。

因为平时总看到系统中存在很多.bat的文件,以前只知道它是批处理文件,但具体怎么用,有哪些语法,我是一点也不了解,结果在做一个项目的时候,需要解压一个文件夹下的上百个压缩文件,如果手动一个一个解压肯定是最傻的方法,于是我想到了批处理文件,可之前都没了解过,这下只好自己去学了。

在这篇博文里我不会去仔细强调批处理的语法,我会列举出很多批处理可以使用的场合,让大家有一个感性的认识,知道我们的日常操作中有很多事情是可以简化操作的,如果大家想要去学,微软的技术网站上有很好的资料,如下:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true

  • 批处理文件的创建:

首先告诉大家几种特别的创建文件的方法,一般大家创建这种文本文件想到的方法肯定是用记事本来写,对。这是非常正确的,不过,很可惜,我在做那个项目的时候,经过特殊处理化的windows系统无法使用图形界面,也就是说我没有记事本可以用,这里我介绍两种命令行界面创建文本文件的方法,这不光针对批处理文件,对其他的文件,你也可以试着这么去创建,还可以拿这招去在MM面前炫耀一下,你说对不?!!

第一种方法是使用copy con 1.bat命令,con代表计算机的屏幕,copy命令是拷贝的意思路人皆知,这条命令的意思就是把屏幕上的内容拷贝进文件1.bat中,当然1.bat也可以是2.bat、3.txt之类的文本文件。如下:我使用这条命令在d:\batch目录下创建了一个1.bat的批处理文件,文件内容是There is a.txt file in current directory!注意,在使用这条命令时,想要结束输入,需要按下ctrl+z。

如何使用批处理_批处理

如何使用批处理_休闲_02

 

第二种方法是使用edit命令,edit是系统自带的一个文本编辑程序,而且它支持鼠标操作,你只需要在命令行输入edit回车后就会弹出如下的蓝色窗口,就可以进行输入和编辑了,编辑完了后进行保存就行了。

如何使用批处理_休闲_03

我看着怎么跟TC的界面很像,呵呵!~~

如何使用批处理_批处理_04

支持鼠标点击。

如何使用批处理_03_05

 

  • 批处理文件的语法:

虽然我不想强调语法,因为这些都是死东西,去网上搜搜就出来一大把,但为了方便我后面的介绍,我还是简略讲几点吧。

windows下的批处理命令主要有以下这些:

echo:用于在屏幕显示文字信息。

命令格式:echo [{on|off}][message]

参数说明:

on:允许批处理文件在执行的过程中显示命令。

off:禁止…………………………………………。

message:表示需要显示在屏幕上的信息。

实例:

我把前面创建的1.bat修改为如下几条指令,先打开echo,然后ver显示系统版本,然后path一下显示环境变量,然后关闭echo,再做一遍。我们来看看有什么区别。

如何使用批处理_批处理_06

我们清楚得看到,echo off之后的ver和path就没有显示在屏幕上了,而他们的执行结果就顺序连接在一起了。

如何使用批处理_linux_07

 

@:用于屏蔽执行的命令显示在屏幕上。

命令格式:@[command]

参数说明:

command:要屏蔽的显示命令。

实例:

还是刚才那个例子,这次我用@屏蔽了前三条指令。

如何使用批处理_linux_08

我们会看到这次除了echo off显示在屏幕上以外,其他的命令都没有显示了。当然我也可以把echo off给屏蔽了。

如何使用批处理_批处理_09

 

goto:这个的意思应该都懂吧。

命令格式:goto label

参数说明:

label:一个标记罢了。

实例:

继续上面的例子,我在ver和path之间放了一个label,然后在echo on后面增加语句goto label,这样我希望的是跳过ver语句。(这里需要注意,label以:开头并紧跟标识符,其实也可以不以:开头,但为了下面的call语句统一,建议标签都以:开头。标识符不能有逗号、冒号等,但可以有空格,有效长度是8位,超过的将忽略8位之后的部分)

如何使用批处理_03_10

果然如我所想:

如何使用批处理_套接字_11

 

pause:用于暂停。

命令格式:pause

参数说明:

没有参数。

实例:

还是上面的例子,我在ver之后放置一个pause命令看看会发生什么。

如何使用批处理_套接字_12

它在执行了ver命令后,继续执行pause命令,然后就暂停了,按任意键继续,按ctrl+c就直接结束了,不执行之后的命令。

如何使用批处理_linux_13

按任意键继续:

如何使用批处理_休闲_14

按ctrl+c提示是否结束,选择y就结束了。

如何使用批处理_linux_15

 

call:这是个强大的命令,它允许你在一个批处理文件中调用另外一个批处理文件。

命令格式:call [绝对路径]Filename 或者 [:label]

参数说明:

[绝对路径]Filename:另一个批处理文件。

[:label]:像goto一样,call也可以跳到某个标签之后执行。

实例:

这次我需要两个批处理文件,于是我在目录下又建了一个2.bat,里面就放了两条命令,一个path,一个ver。然后我修改了1.bat,让它先调用2.bat,然后跳到我在1.bat中ver之后放置的cc标识符处执行。

如何使用批处理_03_16

我们看到,这里的执行大部分都按照我们的想法在做,为什么我说大部分而不是全部呢?因为我们发现call跳到cc之后执行了path后,结果又回到call :cc执行继续执行了一遍,相当于跳到一个地方做完事情后又回到原地方继续往下做,这样,我们的path命令就被执行了两次。

如何使用批处理_linux_17

 

start:用于启动一个单独的命令行窗口。

命令格式:

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]

参数说明:

"title":在窗口标题栏中显示的标题。
path:起始目录。
B:在不创建新窗口的情况下开始应用程序。 除非启动 ^C 处理,否则该应用程序会忽略 ^C 处理;^Break 是唯一可以中断该应用程序的方式。
I:新环境是传递给 cmd.exe 的原始环境,而不是当前环境。
MIN:开始时窗口最小化。
MAX:开始时窗口最大化。
SEPARATE:在分开的空间内开始 16 位 Windows 程序。
SHARED:在分共享的空间内开始 16 位 Windows 程序。
LOW:在 IDLE 优先级类别开始应用程序。
NORMAL:在 NORMAL 优先级类别开始应用程序。
HIGH:在 HIGH 优先级类别开始应用程序。
REALTIME:在 REALTIME 优先级类别开始应用程序。
ABOVENORMAL:在 ABOVENORMAL 优先级类别开始应用程序。

BELOWNORMAL:在 BELOWNORMAL 优先级类别开始应用程序。
WAIT:启动应用程序并等候它结束。
command/program:如果是内部 cmd 命令或批文件,那么该命令处理器是用 /K 命令行开关运行 cmd.exe 的。这表示该窗口在命令运行后仍然存在。如果不是内部 cmd 命令或批文件,则是一个程序,并作为窗口应用程序或控制台应用程序运行。

parameters 这些为传送到命令/程序的参数。

实例:

继续修改上述的第一个批处理文件,让他启动一个新的命令行窗口并执行2.bat文件

如何使用批处理_批处理_18

当然,对于上述的各种参数,你完全可以自己慢慢摸索,这也是一个慢慢熟悉的过程。

如何使用批处理_休闲_19

 

rem:注释。

命令格式:rem [comment]

参数说明:

comment:注释。

实例:

修改1.bat,在ver和path中插入一个rem行的注释,可以看到它也显示在命令行窗口了,可以用echo off命令让他不显示出来。

如何使用批处理_套接字_20

if:条件判断。

命令格式:

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

参数说明:

NOT:指定只有条件为 false 的情况下, Windows XP 才应该执行该命令。

ERRORLEVEL number:如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定条件为 true。

string1==string2:如果指定的文字字符串匹配,指定条件为 true。

EXIST filename:如果指定的文件名存在,指定条件为 true。

command:如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟一个执行 ELSE关键字后的命令的 ELSE 命令。

实例:

修改1.bat文件,作一次判断,如果当前目录下存在2.bat文件就执行ver命令,如果不存在就echo显示“没有2.bat”。

当然,我的目录下是存在这个文件的,所以可以看到执行了ver命令,大家可以自己做不同的尝试。

如何使用批处理_linux_21

set:定义变量和设置环境。

命令格式:

SET [variable=[string]]

参数说明:

variable:指定环境变量名。

string:指定要指派给变量的一系列字符串。

实例:

修改1.bat,把2.bat作为变量xxx的值,然后在if判断里直接判断是否存在xxx这个变量,如下:

如何使用批处理_03_22

shift:移位。

命令格式:

shift [/n]

参数说明:

/n:设置批处理从第n个参数开始移位,n的值为0~8。

实例:

修改1.bat文件,设置了两个标签,%0~%9用来获取参数的,如下我输入的命令为:1.bat 1.bat 2.bat,那么%0就是1.bat,%1是1.bat,%2是2.bat。这个批处理文件的作用是先判断第一个参数是否为空,如果不为空就显示其内容,然后循环移动参数,直到参数为空。shift起到的作用就是移动参数。

如何使用批处理_套接字_23

for:循环语句。

命令格式:

FOR %variable IN (set) DO command [command-parameters]

参数说明:

%variable:指定一个单一字母可替换的参数。
(set):指定一个或一组文件。可以使用通配符。
command:指定对每个文件执行的命令。
command-parameters:为特定命令指定参数或命令行开关。

实例:

修改1.bat,在当前目录下循环查找.bat结尾的文件,找到一个显示一个,并把变量sum+1

如何使用批处理_03_24

 

所有我表述的这些命令,你在命令行窗口敲击这些命令 /?就能够看到系统的提示信息,有任何不清楚的地方果断去试试吧。

 

不知不觉就已经说了这么多了啊!!看来离题甚远了,算了,就再说一个例子算了,以后有时间再补上吧!

比如我们经常需要把一个程序跑好多遍来测试它的性能,这时我们就可以用批处理文件来完成,我们可以这样来完成:

for /L %%n in (0,1,9) do (

test.exe

)

这样可以把当前目录下的test.exe程序执行10遍,如下所示:

如何使用批处理_批处理_25

 

当然,批处理命令能够做的事情还有很多,我这里就不再一一举例,只是让大家明白我们日常的工作中,有很多小的工具可以使用,比如这个简单的批处理命令,我们可以简化我们的重复性工作,希望引起大家的注意罢了。

 

最后,我找实习的这段时间有很多精彩的故事准备和大家分享,这段时间还有些忙,等慢慢再写出来和大家一起分享。如果你也是学生,也有过这样的经历或是将来有这样的打算,那么我的经历一定对你有所帮助,我也尽力写的详尽些,好了~~分享快乐~~