前一阵子使用WIN7的时候,忽然出现图标缓存的问题。去网上搜了下解决方案,发现一个比较好的处理步骤。原文我已经忘记了,后来在年三十的晚上,顿觉很无聊,就按照印象中的代码,写了一个小的批处理文件。具体参考(此处插入百度文库的那篇文章地址)。后来觉得批处理挺好玩的,趁在家休息的这些日子,系统学习一下批处理的语法以及应用。批处理命令通俗的讲就是平时我们见到的那些.bat为后缀的文件,它们可以不断的重读执行命令,实现windows的自动管理,可以将用户从重复、繁琐、复杂的管理任务中解放出来,事半功倍。Windows中常用的批处理程序应用范围主要是:文件/文件夹管理、系统启动与关闭、个性化桌面环境、个性化IE、个性化资源管理器、系统优化、系统维护与管理、系统安全、网络管理与安全、组策略与MMC的应用和其他一些高级应用。一般而言,创建批处理文件最好的方式是使用记事本编辑保存文件。即在记事本中写代码,然后保存的时候以.bat作为后缀即可。看一个例子,以初步接触批处理小程序。为演示方便,PC机选择目前最为大众化的MicrosoftWindowsXP作为操作系统。(1)在windows下按【Win+R】键,在弹出的运行对话框中输入notepad(2)在文本文件里输入(3)保存批处理文件(4)接下来就是运行这个批处理文件。初学者编写的小程序推荐在DOS下面运行,等已经可以独立的编写稍微复杂程序的时候在找到这个批处理文件,然后直接打开就可以了。在windows下按【Win+R】键,在弹出的运行对话框中输入cmd,并转到存储Demo_1.bat的目录下,这里就是指的是D盘。运行Demo_1.bat,就会出现下面的结果如果直接选择打开Demo_1.bat,就会出现下面的界面所以你会发现,这种直接打开的方式不仅操作简单,而且界面简洁,但是一开始最好从DOS下面运行比较好,究竟为什么,你会在开始的几个小程序里体会到。在学习批处理程序语法的时候,有一种非常便利的方式。比如下面要讲的第一个语法,echo的使用,我们可以使用下面的方法来获取命令的格式以及用途。(1)新建一个批处理文件,具体的内容如图所示。(2)在DOS下运行,得到下面的结果这样我们就获得了echo命令的语法和用途。授人以鱼不如授之以渔,掌握这个方法之后,即使长时间没写批处理小程序,我们依旧能够在最短的时间里回忆起相关的语法以及命令。一些常用的命令有:echo、@、goto、pause、call、start、rem、if、set、setlocal、shift、for、通配符(*、?)、管道符(|)、重定向符(、、)等等。在接下来的章节中,我将简单的介绍下这些命令的使用方法。echo命令语法及应用echo命令可用于在屏幕显示相关的文字信息,起到提示和说明的作用,还可用于控制批处理文件在执行的过程中是否回显(此处插入回显的定义)。DOS帮助里这么形容:显示信息,或将命令回显打开或关上。ECHO[ON|OFF]ECHO[message]要显示当前回显设置,键入不带参数的ECHO。如果是控制回显,那么则用到上一条的语法。echoon表示回显打开,echooff表示回显关闭。示例如下:Demo_3.bat://这是回显打开的情景。Code3:Result3:Demo_4.bat//这是回显关闭的情景Code4:Result4:通过对比,很显然的可以看出差别。回显关闭的时候,echo和pause所引起的命令都不会显示在结果中,反之则会显示。由此可以看出回显是指把命令显示在结果中。但是仔细对比会发现一个问题:echo命令可以控制批处理命令中其他命令是否回显,但却不能控制命令本身。从结果中可以看出,无论是否关闭命令回显功能,批处理中的echoon/off命令都会出现在屏幕中。为了解决这个问题,我们继续看@命令的使用。@命令语法及应用@命令用于禁止当前执行的命令回显在屏幕上。@不受echo命令设置效果的影响,且命令本身不会显示在屏幕上。这个命令是一个非常简单的命令,在DOS帮助里是找不到的。命令格式:@[command]参数说明:·command:要屏蔽回显的命令·当命令不加任何参数执行的时候,将不产生任何效果对于Demo_4做一些修改,得到以下结果Code5:Result5:对比Result5可以清晰的看到D:/echooff已经不见了。echo与@命令的主要区别在于:@命令只对当前命令行起作用,且不受echo命令设置影响;echo命令则影响设置之后的所有命令,一直到出现另一个echo命令改变回显的状态为止。pause命令的语法及应用pause命令用于暂停批处理的执行并给出提示信息,然后用户决定是继续执行还是中断执行。命令格式:pause参数说明:·此命令没有参数。当命令运行后,会中断执行的语句,并显示以下语句请按任意键继续...。演示如下Demo_6.bat:Code6:Result6:当命令运行到pause处的时候会暂停执行,并给出了请按任意键继续...的提示信息。按键盘上的任意键,即可继续执行后面的命令,若按下[Ctrl+C]键,则可直接中断批处理的执行,返回到命令行的状态。goto命令的语法及应用goto是一个流程控制转向命令,用于控制批处理中的命令执行流程。先来看看DOS帮助下的解释:将cmd.exe导向到批处理程序中带标签的行。GOTOlabellabel指定批处理程序中用作标签的文字字符串。标签必须单独一行,并且以冒号打头。、看一个示例:Code9:Result9:可以看出,当执行到goto语句时,直接跳过下面的echo语句,转到last处,并接着运行last之后的所有语句,一直到结束。标识符中不能含有逗号、冒号等,但可以使用空格。标识符的有效长度为最多8个字符,如果多于8个字符则只识别前八个字符。call命令语法及应用call命令可以在批处理程序中调用另一个批处理程序,也可调用指定标号之后的所有命令。命令格式:CALL[drive:][path]filename[batch-parameters]参数解释:batch-parameters指定批处理程序所需的命令行信息。看一个示例:Code10:Result10:Call命令在使用标号时必须加上:号,而goto语句中则不需要添加。此外,call命令转向标号并执行到文件结束时会返回到调用处并继续执行剩下的命令,而goto语句跳转后不再返回。if命令语法及应用if命令通过条件来决定批处理程序应该如何执行。在编写复杂的批处理程序时,if是一个必不可少的命令。先来看看DOS帮助里面的描述:IF[NOT]ERRORLEVELnumbercommandIF[NOT]string1==string2commandIF[NOT]EXISTfilenamecommandNOT指定只有条件为false的情况下,WindowsXP才应该执行该命令。ERRORLEVELnumber如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定条件为true。string1==string2如果指定的文字字符串匹配,指定条件为true。EXISTfilename如果指定的文件名存在,指定条件为true。command如果符合条件,指定要执行的命令。如果指定的条件为FALSE,命令后可跟一个执行ELSE关键字后的命令的ELSE命令。ELSE子句必须在IF之后出现在同一行上。例如:IFEXISTfilename.(delfilename.)ELSE(echofilename.missing.)因为del命令需要用一个新行终止,以下子句不会有效:IFEXISTfilename.delfilename.ELSEechofilename.missing由于ELSE命令必须与IF命令的尾端在同一行上,以下子句也不会有效:IFEXISTfilename.delfilename.ELSEechofilename.missing如果都放在同一行上,以下子句有效:IFEXISTfilename.(delfilename.)ELSEechofilename.missing其中,比较运算符可以是:EQU-等于NEQ-不等于LSS-小于LEQ-小于或等于GTR-大于GEQ-大于或等于来看一个示例:Code11:Result11:如果这么写,那就会出现错误,至于原因在上面引述的DOS帮助里已经写得很清楚了。Code12:Result12:若if命令中带有else子命令,else子命令一定要与if中的最后一个命令在一行,否则会出现错误。此外,当if或else后面跟有多条命令时,应该用小括号将其括起来。for命令语法及应用for命令是批处理中一个功能强大且相对复杂的命令,它可对一组不同的文件或数据进行循环处理。照旧,看看DOS帮助里面的内容:FOR%variableIN(set)DOcommand[command-parameters]%variable指定一个单一字母可替换的参数。(set)指定一个或一组文件。可以使用通配符。command指定对每个文件执行的命令。command-parameters为特定命令指定参数或命令行开关。在批处理文件中使用FOR命令时,指定变量请使用%%variable而不要用%variable。变量名称是区分大小写的,所以%i不同于%I.下面,我们来看一个示例:Code13:Result13:在循环体中可对for后变量直接引用,这种引用与使用set命令定义的变量不同,for后的变量区分大小写。Shift语法及应用Shift命令用于更改批处理文件参数的方式,如指定起始处理参数的位置。SHIFT[/n]如果命令扩展名被启用,SHIFT命令支持/n命令行开关;该命令行开关告命令从第n个参数开始移位;n介于零和八之间。例如:SHIFT/2会将%3移位到%2,将%4移位到%3,等等;并且不影响%0和%1。看一个示例:Code14:Result14:符号%0~%9专用于批处理从命令行获得的参数,依次代表命令行的相应参数。rem命令语法及应用rem命令是一个注释命令,用于在批处理中加入相关的说明信息。这些说明信息可以帮助读者理解批处理的功能。命令格式:rem[comment]参数说明:·comment:指定要作为注释的任何字符串演示程序如下:Code7:Result7:可以看出注释的部分只有在代码中才可以看到,结果是不显示的。在使用rem命令的时候应该将回显状态关闭,否则会将rem命令的整行信息输出到屏幕。start命令语法及应用Start命令用于重新启用一个新的命令行窗口,然后在新的窗口中执行指定的程序或命令。在DOS下面查看帮助信息:启动另一个窗口运行指定的程序或命令。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优先级类别开始应用程序我们来看一个示例:Code8:Result8:这时候在第二个窗口中输入命令exit,则会正常返回到第一个窗口中。如果直接关闭第二个窗口,则会出现这种结果,可以看到第