您好,欢迎访问三七文档
基础部分:======================================================================一、基础语法:1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。2.批处理是一种简单的程序,可以用if和goto来控制流程,也可以使用for循环。3.批处理的编程能力远不如C语言等编程语言,也十分不规范。4.每个编写好的批处理文件都相当于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在任意位置运行。5.C:\AUTOEXEC.BAT是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。6.大小写不敏感(命令符忽略大小写)7.批处理的文件扩展名为.bat或.cmd。8.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe来运行该文件。二、参数:1)系统参数%SystemRoot%===C:\WINDOWS(%windir%同样)%ProgramFiles%===C:\ProgramFiles%USERPROFILE%===C:\DocumentsandSettings\Administrator(子目录有“桌面”,“开始菜单”,“收藏夹”等)%APPDATA%===C:\DocumentsandSettings\Administrator\ApplicationData%TEMP%===C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp(%TEM%同样)%APPDATA%===C:\DocumentsandSettings\Administrator\ApplicationData%OS%===Windows_NT(系统)%Path%===%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem(原本的设置)%HOMEDRIVE%===C:(系统盘)%HOMEPATH%===\DocumentsandSettings\Administrator::枚举当前的环境变量setlocalenabledelayedexpansionFOR/Fusebackqdelims==%%iIN(`set`)DO@echo%%i!%%i!2)传递参数给批处理文件%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。Sample:calltest2.bathellohaha(执行同目录下的“test2.bat”文件,并输入两个参数)在“test2.bat”文件里写:echo%1(打印:hello)echo%2(打印:haha)echo%0(打印:test2.bat)echo%19(打印:hello9)三、批处理基本命令0.help命令/?命令语法:命令/?可显示此命令的帮助信息Sample:type/?tmp.txt(把type命令的帮助信息写入到tmp.txt文件里)Sample:helptype(显示跟“type/?”一样)1.Echo命令语法:echo[{on|off}][message]ECHO[ON|OFF]打开回显或关闭回显功能。ECHO显示当前回显设置。ECHO[message]显示信息。echooff表示在此语句后所有运行的命令都不显示命令行本身;默认是on,on时会显示如:C:\文件夹路径命令行。在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用^)结合来实现输入一些命令到特定格式的文件中。Sample:echooffSample:echohelloworld(显示出“helloworld”)Sample:echoWindowsRegistryEditorVersion5.00c:\setupreg.reg(此前还没有setupreg.reg这个文件)Sample:echoSourcePath=D:\\Win2003\\c:\setupreg.reg(追加内容进setupreg.reg这个文件)2.@命令表示不显示@后面的命令,(在入侵过程中自然不能让对方看到你使用的命令啦)@与echooff相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。Sample:@echooff(此语句常用于开头,表示不显示所有的命令行信息,包括此句)Sample:@echopleasewaitaminite...Sample:@formatX:/q/u/autoset(format这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)3.Goto命令语法:gotolabel(label是参数,指定所要转向的批处理程序中的行。)指定跳转到标签行,找到标签行后,程序将处理从下一行开始的命令。label标签的名字可以随便起,但是最好是有意义的,字母前必须加个冒号“:”来表示这个字母是标签。goto命令就是根据这个冒号来寻找下一步跳到到那里。经常与if配合使用,根据不同的条件来执行不同的命令组。例题见“5.Pause命令”4.Rem命令语法:RemMessage...(小技巧:用::代替rem)注释命令,在C语言中相当与/*...*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和自己日后修改。Sample:@RemHereisthedescription.5.Pause命令会暂停批处理的执行并在屏幕上显示Pressanykeytocontinue...的提示,等待用户按任意键后继续Sample:@echooff:begincopya:*.*d:\backechoPleaseputanewdiskintodriverApausegotobegin在这个例子中,驱动器A中磁盘上的所有文件均复制到d:\back中。显示的信息提示您将另一张磁盘放入驱动器A时,pause命令会使程序挂起,以便您更换磁盘,然后按任意键再次复制。6.Call命令语法:call[[Drive:][Path]FileName[BatchParameters]][:label[arguments]]参数:[Drive:][Path]FileName指定要调用的批处理程序的位置和名称。filename参数必须具有.bat或.cmd扩展名。调用另一个批处理程序,并且不终止父批处理程序。如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令。call命令接受用作调用目标的标签。如果在脚本或批处理文件外使用Call,它将不会在命令行起作用。Sample:call=%cd%\test2.bathahakkkaaa(调用指定目录下的test2.bat,且输入3个参数给他)Sample:calltest2.batarg1arg2(调用同目录下的test2.bat,且输入2个参数给他)注:可以调用自身(死循环、递归)7.start命令调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。入侵常用参数:MIN开始时窗口最小化SEPARATE在分开的空间内开始16位Windows程序HIGH在HIGH优先级类别开始应用程序REALTIME在REALTIME优先级类别开始应用程序WAIT启动应用程序并等候它结束parameters这些为传送到命令/程序的参数Sample:start/MINtest2.batarg1arg2(调用同目录下的test2.bat,且输入2个参数给他,且本窗口最小化)Sample:e:\programfiles\极品列车时刻表\jpskb.exe(文件路径名有空格时)8.If命令if表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:1)IF语法:if[not]参数==字符串待执行的命令参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)Sample:if%1==aformata:Sample:if{%1}=={}gotonoparms2)ifexist语法:if[not]exist[路径\]文件名待执行的命令如果有指定的文件,则条件成立,运行命令,否则运行下一句。Sample:ifexistconfig.syseditconfig.sys(表示如果存在这文件,则编辑它,用很难看的系统编辑器)Sample:ifexistconfig.systypeconfig.sys(表示如果存在这文件,则显示它的内容)3)iferrorlevelnumber语法:if[not]errorlevel数字待执行的命令如果程序返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。(返回值必须按照从大到小的顺序排列)Sample:@echooffXCOPYF:\test.batD:\IFERRORLEVEL1(ECHO文件拷贝失败)ElseIFERRORLEVEL0ECHO成功拷贝文件pause很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),称为错误码errorlevel或称返回码。常见的返回码为0、1。通过iferrorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令。4)else语法:if条件(成立时执行的命令)else(不成立时执行的命令)如果是多个条件,建议适当使用括号把各条件包起来,以免出错。Sample:if1==0(echocomment1)elseif1==0(echocomment2)else(echocomment3)注:如果else的语句需要换行,if执行的行尾需用“^”连接,并且if执行的动作需用(括起来),否则报错Sample:if1==0(echocomment1)elseif1==0(echocomment2)^else(echocomment3)5)比较运算符:EQU-等于(一般使用“==”)NEQ-不等于(没有“!=”,改用“ifnot1==1”的写法)LSS-小于LEQ-小于或等于GTR-大于GEQ-大于或等于9.choice命令choice使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后配合iferrorlevel选择运行不同的命令。注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice/?查看用法。choice使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……Sample:choice/c:dmedefrag,mem,end将显示:defrag,mem,end[D,M,E]?Sample:choice/c:dmedefrag,mem,endiferrorlevel3gotodefrag(应先判断数值最高的错误码)iferrorlevel2gotomemiferrotlevel1gotoend10.for命令for命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。1)for{%variable|%%variable}in(set)docommand[command-parameters]%variable指定一个单一字母可替换的参数。变量名称是区分大小写的,所以%i不同于%I在批处理文件中使用FOR命令时,指定变量建议用%%variable而不要用%variable。(set)指定一个或一组文件。可以使用通配符。command指定对每个文件执行的命令。command-parameters为特定命令指定参
本文标题:bat批处理学习
链接地址:https://www.777doc.com/doc-5589322 .html