1、批处理各符号的功能1新批处理各符号的功能1.echo有两个状态一个是on 一个是off默认的是on 它的功能是显示当前文件的路径,如果不写on 或者是off的时候,默认情况下是打开的即显当前文件的路径,加上off后,所有路径都不显示,但是echo off这行还能显出来,要让这行也消失的话就在它们前面加一个即echo off,另外echo命令的另一种用法,可以直接编辑文本文件,例如:echo netstat -an a.bat结晶果是在当前目录下生成一个a.bat的文件,双击直接执行这个文件时,就会执行netstat -an这个命令。2. 这个字符的意思是将前面的内容传递并且覆盖后面的内容,它所
2、起的作用是将运行的回显结果传递到后面的范围.例如:ipconfig.txt中的内容是1113333,执行ipconfig /all ipconfig.txt即将ipconfig /all的内容覆盖原有的1113333。与这个符号相似的还有它的功能不是覆盖而追加,即将运行后的内容加到原来的1113333后。3.| 这是一个管道传输命令,意思是将上一命令执行的结果传到下一个命令去处理例如:dir c:|find txt以上命令是:查找C:所有,并发现TXT字符串。|Usage:第一条命令 | 第二条命令 | 第三条命令.用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果
3、没有出现正确的命令则一直执行完所有命令;(只要正确后面的就不执行)4. 是对特殊符号,&的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。例如:C:echo ipconfig.txt ipconfig结果为:ipconfig.txt ipconfig没有追加只是显示出来而已5.& 这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行例如:C:dir d:/p & dir e: /p & dir c: /p结果是先后执行6.& 这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行例如:C:dir
4、 w:/p & dir e: /p & dir c: /p 由于电脑上没有w盘所以显示结果为:系统找不到指定的路径。这样以来,后面的两个盘就不执行啦。(当第n个命令失败时此命令后面的命令将不再执行,也就是说一直执行到失败为止)7. 双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法cd program filescd progra1cd pro*以上三种方法都可以进入program files这个目录8., 逗号相当于空格,在某些情况下“,”可以用来当做空格使比如dir,c:9.; 分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,
5、但程序还是会执行。比如:dir c:;d:e:;f:以上命令相当于dir c:dir d:dir e:dir f:但是前面执行的盘不存在的话,后面的命令将不会执行。例如:C:dir w:;d: /p;e: /p结果为:系统找不到指定的路径。10.在echo的后面加一个点,所起到的作用是显示一空行。以下范例显示的批处理程序包含前后各有一个空行的三行消息: echo offecho. echo This batch program echo formats and checks echo new disks echo. 如果想让打开的批处理命令的标题栏有名字的话可以用到title这个参数title
6、 filenamenul 2nul可以屏蔽一切屏幕的输出,例如:dir nul 2nul这样屏幕上什么都不会输出,也就是没有结果。1nul 表示将正确执行目录树的信息禁止输出,2nul 表示将执行过程中的错误信息禁止输出。断开网络连接方法有两种:一种是rasphone /h adsl,另一种是rasdial adsl /d11.goto一般和:是联用的goto跳转的地方入口就是:。goto命令的另一种用法一:提前结束程序。在程序中间使用goto命令跳转到某一标签,而这一标签的内容却定义为退出。如:goto end:end dir中有些命令是要牢记的dir d: /s /p /b (/a这后面还
7、有一些参数像h,r,d,s/d)具体的可以看帮助%userprofile%在写批处理时这个相当于C:Documents and SettingsAdministrator在结束关键进程的时候,要先结束explorer.exe这个进程,最好用系统自带的工具taskkill这个关explorer.exe的时候任何杀毒软件都没有提示,但是如果换成了用ntsd关的话,卡巴斯基会报毒,而且这时的explorer会在关闭的一下后马上自启动,而taskkill就会一直关着直到等你开启为止。在使用for 的时候当用到 /d时,那是因为set中有* ?这两个通配符shift1.可替代参数的编号是o-9,如果要在
8、一个命令行上使用超过10个可以被代换的参数,则可使用SHIFT命令来突破此限制。2.每当执行sHIFT一次,命令行上的所有参数将向左移动一位。1的内容将为2的内容所取代,9内容则由新的参数取代。3.o表示批处理文件本身的名称,永远不变,所以每次执行时可以在批处理文件使用一次shift就向右移动一位,例如:a.bat的内容:echo %1 %2 %3 %4 %5 %6 %7 %8 %9shiftecho %1 %2 %3 %4 %5 %6 %7 %8 %9shiftecho %1 %2 %3 %4 %5 %6 %7 %8 %9pause运行c:a 1 2 3 4 5 6 7 8 9 10 11(
9、其后有11个参数)1 2 3 4 5 6 7 8 9 (取到最前面9个参数)c:shift (移位)2 3 4 5 6 7 8 9 10 11(取到另外9个参数)c:shift (移位)3 4 5 6 7 8 9 10 (取到另外9个参数)在批处理中del /f /s /q可以删除指定目录下的任何文件,但是不能删除文件夹,rd /s /q不但可以删除指定目录下的文件夹而且还可以删除目录下的所有文件,以前总是以为rd只能删除文件夹,现在才知道用这个命令还以删除文件夹echo off echo off:top :topif (%1)=() goto end if (%1)=()goto endsh
10、ift shiftecho still running echo still runninggoto top goto top:end :end看到了吧!两个程序就是第三行的goto前面不一样,第一个有一个空格,而第二个没有,就是这个空格所产生的结果就不一样,第一个结果是三行still running,而第二个结果是一个无限制的循环,一直不停的显示still running,所以写程序的时候一定要注意errorlevel若一个程序或DOS命令执行成功,则返回的E只RORLEVEL的值为o,否则为1至255之间AscII值的任意整数,其值只占一个字节约内存空间,值得注意的是IF语句中检验的ERR
11、ORLEVEL值是大于或等于而不是等于,例如语句IF ERRORLEVEL 5检验的是ERRORLEVEL5而不是ERRORLEVEL=5,因此对于5至255之间的任何整数,此语句检验结果都是真值。在变量延迟时要用到setlocal EnableDelayedExpansion例如:echo offsetlocal EnableDelayedExpansion.然后写要用的代码需要注意的是,一旦启用了变量延迟,就要用!号把变量括起来,而不能用%号。echo !n!显示变量n的值例如:echo off &SETLOCAL ENABLEDELAYEDEXPANSIONset mm=gril&ech
12、o !mm!pauseping 在批处理中有延时的作用,开始的时候不知道怎么用,后来才发现,每ping一次的时间是一秒,所以写成ping /n 10 127.1或者是ping /n 10 localhost效果是一样的,都能起来延时十秒的作用setSET /A expression环境变量替换已如下增强:%PATH:str1=str2%PATH:10,5%PATH:-10%PATH:0,-2%PATH:str1=str2%这个操作就是把变量%PATH%的里的str1全部用str2替换例如:echo offset a= echo 替换前的值: %a%set var=%a: =qq%echo 替换
13、后的值: %var%pause结果是:替换前的值: 很明显吧,那个空格被qq给代替啦-替换后的值: 请按任意键继续. . .echo offset a=echo 替换前的值: %a%set var=%a:.=伤脑筋%echo 替换后的值: %var%pause解释set var=%a:.=伤脑筋%set命令 var变量名 字a是要进行字符替换的变量的值,.为要替换的值,伤脑筋为替换后的值!执行后就会把变量%a%里面的.全部替换为伤脑筋这就是set的替换字符的很好的功能!先讲到这%PATH:10,5%echo offset a=set var=%a:1,2%echo %var%pause执行后,
14、我们会发现只显示了bs两个字母,我们的变量%a%的值不是为吗怎么只显示了第2个字母和第3个字母bs,分析一结果我们就可以很容易看出%PATH:10,5%就是显示变量PATH里指定几位的值!分析set var=%a:1,2%set命令 var变量值 a要进行字符操作的变量 1从变量a第几位下一位开始显示 2显示几位和起来就是把变量a的值从第一位开始,把后两位赋予给变量var%PATH:-10% 例子echo offset a=set var=%a:-3%echo %var%pause这个的意思是从右往左取三位,把取到的部分给了var ,如果把负号去掉,就成了从左往右去掉三位把剩下的部分给了var
15、%PATH:0,-2% 例子echo offset a=set var=%a:4,-3%echo %var%pause结果是verybat,这段代码的意思是,从右去掉三位,把左剩余的部分,从第四位的下一位开始显示,把显示的内容给了var如果改成set var=%a:3,-3%结果就是.verybat延迟和set的综合应用:echo off setlocal enabledelayedexpansiontitle I Love Greatwallset love=I Love Greatwall Foreverfor /l %i in (1,1,24) do (cls echo. !love:0
16、,%i! ping/n 1 127.1nul 2nul)pause我觉得这段代码很意思,do里面的命令主要是分三块但是这三块不能在同一行,分三行写.因为它们是不同的命令,要想写在一行的话要加&,写好后为for /l %i in (1,1,24) do (cls &echo. !love:0,%i! &ping/n 1 127.1nul 2nul)for在DOs提示符下可直接使用FOR语句,用法的区别在于必须把variable写成variable关于FOR语句的使用方法,归纳如下:(1)为了在各种DOS版本下都能运行,vart6le的变量必须为单个字符,应避免使用o一9作为变量。(2)FORva
17、riaNeIN tnle s就)commandvariable其中File set必须放在括号内,文件的个数没有限制,只要不超过D05命令行127个字符的限制即可,文件之间用空格或逗号作为分隔符分开,文件名可以使用通配符。(3)FoR语句中后面的变量有时可省略,如:FORa IN(*.BAK)D0 DIR(4)FOR语句的结尾如果执行另一个批处理程序,执行结束后,不再返回FOR语FOR /D %variable IN (set) DO command /D参数只能显示当前目录下的目录名字echo offfor /d %i in (*) do echo %ipause把他保存放在C盘根目录执行,
18、就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示!echo offfor /d %i in (?) do echo %ipause这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符FOR /R drive:path %variable IN (set) DO command它可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字echo offfor /r c: %i in (*.exe) do echo %ipause把C盘根目录,和每个目录的子目录下面全部的EXE文
19、件都列出来了echo offfor /r %i in (*.exe) do echo %ipause以当前目录为搜索路径,显示当前目录的全部EXE文件列出来!for /L % Variable in (Start#,Step#,End#) do Commandecho offfor /l %i in (1,1,5) do start cmdpause看上面的start step end就知道是什么意思了吧,开始,结束,步阶,按一步一个的话,就会总有六个cmd跳出来五个设置默认的控制台前景和背景颜色。for /F ParsingKeywords % Variable in (FileNameSe
20、t) do CommandParsingKeywords 它表示4个参数eol=c - 指一个行注释字符的结尾(就一个)skip=n - 指在文件开始时忽略的行数。delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单
21、引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。例如:新建一个文件名字为test.txt内容为:;哈哈你好!相信自己一定会成功Never Say Die好啦就这样吧echo offFOR /F eol=; tokens=1 delims= %i in (test.txt) do echo %ipause你好!相信自己一定会成功Never好啦就这样吧这个命令会读取在当前目录下名为test.txt文件中的内容,然后将每一行的内容赋值给变量%i,然后忽略掉以;号开头的行,并且以空格做为分隔符号,打印第每行以空各做分隔符号的第一列又例如:echo offfor /f
22、tokens=3 delims=- %a in (date /t) do echo %a pausedate /t的结果是:2007-08-22 星期三所以批处理的结果为:22echo offfor /f tokens=2,3,4 delims=- %a in (date /t) do echo %c-%a-%bpause结果为:-08-22 星期三总结:以上两个的结果都是从date /t中以-为分隔符,从左往右依次取第三列(这就是第一个的结果22),第二,三,四列(这就是第二个的结果-08-22 星期三),这个for以后的用处还很大.FOR的变量全部列出来:凡是 % 开头的操作符,都是文件名
23、的分离操作I - 删除任何引号(),扩展 %I这个变量的作用就如他的说明,删除引号!我们来看这个例子:首先我们在桌面建立一个名字为temp.txt文本文件,在里面输入这些内容1111222233334444然后在建立个BAT文件代码如下:FOR /F delims= %i IN (temp.txt) DO echo %ipause执行后,我们看CMD的回显如下:1111222233334444和之前temp.txt中的内容对比一下,我们会发现第一行和第三行的引号都消失了,这就是删除引号i的作用了!删除引号规则如下(BAT兄补充!)1、若字符串首尾同时存在引号,则删除首尾的引号;2、若字符串尾不
24、存在引号,则删除字符串首的引号;3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除%fI - 将 %I 扩展到一个完全合格的路径名FOR /F delims= %i IN (dir /b) DO echo %fipause执行后显示内容如下C:Documents and SettingsAdministrator桌面test.batC:Documents and SettingsAdministrator桌面test.vbs当我把代码中的 %fi直接改成%iFOR /F delims= %i IN (dir /b) DO echo %ipause执行后就会显示这些内容test.batt
25、est.vbs%dI - 仅将 %I 扩展到一个驱动器号FOR /F delims= %i IN (dir /b) DO echo %dipause执行后我CMD里显示如下C:C:%di作用是,如果变量%i的内容是一个文件或者目录名,那么%di就会把%i这文件或者目录所在的盘符号打印出来!%pI - 仅将 %I 扩展到一个路径这个用法和上面一样,他只打印路径不打印文件名字FOR /F delims= %i IN (dir /b) DO echo %pipauseDocuments and SettingsAdministrator桌面%nI - 仅将 %I 扩展到一个文件名只打印文件名字FOR
26、 /F delims= %i IN (dir /b) DO echo %nipausetest%xI - 仅将 %I 扩展到一个文件扩展名只打印文件的扩展名FOR /F delims= %i IN (dir /b) DO echo %xipause.vbs.bat.txt.txt.txt%sI - 扩展的路径只含有短名打印绝对短文件名FOR /F delims= %i IN (dir /b) DO echo %sipauseC:DOCUME1ADMINI1桌面a.vbsC:DOCUME1ADMINI1桌面a2.batC:DOCUME1ADMINI1桌面q.txtC:DOCUME1ADMINI1
27、桌面test.txtC:DOCUME1ADMINI1桌面_讨论_1.TXTC:DOCUME1ADMINI1桌面常用工具%aI - 将 %I 扩展到文件的文件属性打印文件的属性FOR /F delims= %i IN (dir /b) DO echo %aipause-a-a-a-a-a-dr-%tI - 将 %I 扩展到文件的日期/时间打印文件建立的日期FOR /F delims= %i IN (dir /b) DO echo %tipause2007-08-21 12:302007-08-22 18:402007-08-22 12:312007-08-22 17:582007-08-19 2
28、3:232007-08-16 14:28%zI - 将 %I 扩展到文件的大小打印文件的大小FOR /F delims= %i IN (dir /b) DO echo %zipause7643955864346140最后一个不是个文件而是一个文件夹,所以显示为0,其实不为0的%$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串我们先在桌面建立一个temp.txt文件,里面写上这些内容c:windowsc:windowssystem32c:windowsteett然后在把这些代码保存为批处理,放在桌面.FOR /F delims= %i IN (temp.txt) DO echo %$PATH:ipause执行后CMD显示如下内容c:WINDOWSc:WINDOWSsystem32ECHO 处于打开状态。为什么会这样呢,还有一行c:windowsteett呢?我们直接在CMD里输入echo %path% 会显示C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSy
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1