我的一些BAT经验

   我的一些BAT经验

  虽然我不是很喜欢废话,但是有些废话还是要说的,不说他不痛快。首先说一下这里的学习气氛,真的不是很让人欣慰,也许吧,大家上网多是为了娱乐休闲,而不是想要真正掌握一些东西来的。与这里的Piboye兄提过这个问题,他也是很无奈,与船长说过,表现都是比较无奈,也许,也许,也许我们的想法太过于天真与简单。
  回想从前学习新语言的兴奋与满足,这些感觉无法用文字确切表达。但是学习也需要环境,需要气氛,近来我什么也没有学,什么也不想做,真不知道以前的我哪里去了。不做点什么又对不起自己,于是想到要写这篇文章给那些想学BAT的朋友,也许对你们有些帮助,这里面都是我的经验,我并没有按照什么教程从头到尾地教,这篇文章的逻辑比较散,只是希望你学过后能立马写出一个自己的BAT来。
  好,你在看这篇文章之前你应当要先看过(至少要先见过)我的“IP小工具”,“ipscaner”,“代理服务器搜索器”,以及我在这个论坛里发过的所有有关BAT源文件。为了使本文不太重复我就不帖出这些参考源文件。写得有点像笔记,乱而散。而且就简直是我的作品命令讲解,呵呵。不足之处请指教。
--------------------------
先从我的得意之作“IP小工具”看起:(最新ver2.3)
第一节:(主要是一些界面形式功能的实现以及初始化)
1.“@echo off”--我们所写的BAT一开始一般都有这一句,这一句的作用是:使所有的命令响应隐藏。“@”--本行命令不回显。(本来如果你用echo off就可以了,但是还是能够看到echo off这条命令在CMD下,影响美观)
2.“color 1e”--设置默认的控制台前景和背景颜色。当前我设为蓝底黄字,具体颜色请在CMD下用“color /?”查询。
--这里又提到了这个参数“/?”,一般CMD下命令后加“/?”就会显示这条命令的帮助。
3.“rem”--注释作用,批处理执行过程中前不执行它,rem 后的字符只作注释作用。
4.“title”--设置命令提示窗口的窗口标题。默认为“cmd”。改成自己喜欢的多有个性,嘿嘿。
5.“cls”--不多说,清屏命令。主要是怕前面的一些空白或字符出现影响美观。
6.“set”--这个命令的作用很大,请用“set /?”查询具体使用方法。本例“set topip=172.16.”是将一个名为“topip”的变量值设为“172.16.”。注意CMD下变量的设置不区别数字与字符,能够自动根据提供的值调整。下行“set theip=0.0”同理。
7.“echo .”--在新行中显示一个“.”。echo命令能显示其后的comment。这里提几个有趣实用的用法--“echo.”,注意与前面的不同,“echo”与“.”间无空格。这条命令如同一个回车,在新行不显示任何信息并换行。“echo ”,实现响铃的提示音。后面一个字符的输入方法是在CMD下用“ctrl+G”,而这个字符得到的方法是CMD下用命令“echo "ctrl+G" >ex.txt”,存入ex.txt文件,再从那里提取出来的。嘿嘿,如果你懒得做,就copy我在上面提供的字符喽。
8.“if”--这条命令也会经常用到,请用“if /?”学习更多信息。本例“if not exist scanipc.exe (echo 文件错误!……)”,实现功能:当同级目录下不存在“scanipc.exe”时,提示“文件错误!……”。否则不提示。“if not exist filename”在批处理中使用比较多些。
9.“:top”,设置一个标志点,标志名为“top”。“:”的作用就是设置标志。网上有文章说“使用"::comment"作为注释比"rem comment"执行效率更高。”我相信,这里也建议大家,如果BAT中注释较多时,请使用“::comment”设置。
10.“set /p pno=”--设置一个变量,并接受用户输入。BAT不需要预先声明变量,只在需要时设置。参数“/p”:将变量数值设成用户输入的一行输入。
11.“if %pno% gtr 9 goto onerrorspno”--检验用户输入值是否大于9,是,则转到一个指定标志点。这里注意BAT中变量引用时要在前后加“%”,但在if语句中可有可无,具体应用大家多写几遍就有体会。
12.“goto label”--无条件跳转到指定标志位并向后执行。BAT好像只有这么一个跳转语句了,作用不用我说,用了就知道。注意不要构成死循环。

小结:到此,完成了颜色设置、注释版权说明、标题设置、变量初始化、欢迎信息、功能界面初始化、标志点设置(因为欢迎信息只显示一次而功能界面要多次使用所以将标志点设置在欢迎信息的后面。)命令的接受与跳转。
;功能界面一般要用“tab”键调整相对位置,才能起到美观的效果。请多练习几遍领会。
;大家在写脚本过程中要注意标志点的设置位置,才能起到合适的效果。一般写过几个脚本会有些感受。
;接着接受用户输入后“cls”清屏开始执行指定功能。注意这个cls的作用。因为清屏可以在此时,也可以在每个命令执行之前,但如果在每个命令执行之前用的请,那么要写的cls就多了,于是把cls写在这里合适,方便节约快捷。大家在写脚本时也应当注意这方面的技巧,将使你写出更加高效节约方便的代码。在每次写完脚本后合理地整合一下自己的代码。能积累不少经验。
;另外,鉴于部分人仍不知道如何建立BAT文件与运行,请:打开记事本,写入代码,保存,保存类型为“所有文件*.*”,文件名为“name*.BAT”。保存后,双击运行。因为一般BAT运行很快,所以你可能只看到窗口一闪就消失了,那么你可以在exit之前加pause确保能看见运行结果。

到此,你应该能够写一个很简单的脚本了,实现一些界面控制。
例1:
@echo off
color ca
title 这是我第一个BAT脚本。
echo 这是我第一个BAT脚本。不错啊。
pause >nul
exit


第二节:(提一些好用的命令)
以下设置的都是功能段,在“goto step%pno%”跳转到相应功能段后,开始执行相应功能。
一般命令段:
step1:ping命令。(在echo中变量的引用请注意前后加“%”号,否则会导致程序出错。)
我们常用的ping命令:其实很简单,自己看帮助啦。
本句“ping %topip%%theip% -n 1 |findstr 100%>nul”将ping 只发送一次数据包,这样命令执行起来就快多了,但这样所会引起一定概率的误判,而我们在内网这种概率很低,低到可以忽略。所以本人使用参数“-n 1”减少执行时间。将结果不回显而通过管道命令“|”送给findstr分析,findstr查找是否存在“100%”,并将回显“丢弃”--“>nul”。因为如果ping一台主机如果返回的结果有“100%”存在说明“不在线。或者有防火墙阻挡。”。所以用findstr确定字符串“100%”的存在性,因为findstr也有回显,但我们并不需要,所以将它“丢弃”,使用参数“>nul”将指定命令回显丢弃。(这一句命令是重点,请仔细领会。)
又因为findstr确定指定字符串的存在性后会设定环境变量“errorlevel”的值,所以我们根据“if %errorlevel% equ 0 (command)”,判断findstr的执行结果就行了,也就不需要有回显。
“errorlevel”作用很大,一般命令行下的命令执行后都有一个特别的errorlevel,我们就可以根据相应的“返回值”作出相应判断并执行相应功能。findstr如果找到指定字符串,则有errorlevel=0,说明:IP不在线。那么既然不在线,我们就没有向下执行的必要了,直接跳回top界面功能接受下一次指令。
如果IP有不同回应,说明在线,则开始检测共享。“net view //%topip%%theip%/”--查看指定IP的共享清单。net详细命令请自行查阅。
列出共享清单后返回功能界面。

step2:打开共享一。“explorer //%topip%%theip%/”,用资源管理器打开指定的IP根。注意语法,其它也没有什么。

step3:IPC$空连接。“net use //%topip%%theip%/ipc$ "" /user:"administrator"”,一个很老的漏洞,但也许内网还有机子存在哩,嘿嘿,语法就是这样。

step4:一般信息。“ipconfig /all”--用于得到本机的IP与MAC等信息,很好用的命令。语法如示。
 “nbtstat -na %topip%%theip%”--用于得到他方机子的一些信息,语法如示。另请自查帮助。

step5:Scanipc。用命令行打开了一个程序而已。在命令行下执行其它命令也就是这样啦。

step6:返回时间。“net time //%topip%%theip%”--探测指定机子时间,语法如示。

step7:远程连接。“net use //%topip%%theip%/admin$ "" /user:"administrator"”,嘿嘿,administrator空密码连接。最简单的入侵啦,嘿嘿嘿。语法如示。

step8:本机信息。跳到另一个功能界面执行相应功能。

step9:高级命令。跳到另一个功能界面执行相应功能。

step0:退出程序。一个exit退出脚本。“exit”,退出CMD。

onerrorsip:实现错误提示,并重新执行step1。

onerrorspno:实现错误提示,并重新跳转到功能界面。

高级命令段:
引用前面已给定的IP,并对其进行一些高级操作。重新绘制功能界面。

首先,注意在一个BAT文件中,不允许出现有标志名的重复。

step11:条件连接。设定两个变量,分别为用户名与密码。注意到有一个默认的功能。实现原理是,当接受到用户输入为空时(即一个回车),变量将保持不变。条件连接语法如示。比前面远程空密码连接更高级一点,嘿嘿。

step12:打开共享。打开已经连接成功的对方计算机的指定盘。打开指定盘语法如示。

step13:发送消息。向对方发送消息。要求双方的messager服务开启,否则无法发送成功。发送消息语法如示。

step14:远程关机。设置关机时间与关机理由,用shutdown程序关闭对方计算机,嘿嘿,恶作剧。要求你连接成功,并有shutdown程序支持。shutdown语法自查帮助。

step15:溢出CMD。嘿嘿,溢出到对方的CMD下,算是一个真正的入侵了。当然需要用户名与密码喽。要求用户名与密码正确并对方默认支持远程管理。并有psexec程序支持。psexec语法如示,并请自查帮助。

step16:结束进程。嘿嘿,不说也知道,结束对方已知进程。要求连接成功并有pskill程序支持。恶作剧类,有恶意成分。嘿嘿。小心使用。

step17:ipc$连接。同step3.

step18:断开连接。断开与对方的连接,就是擦屁股啦,以免让对方有所察觉。这个好习惯要养成。语法如示。

step19:一般命令。返回前面一个功能界面。

step20:结束程序。退出。

step110:AT命令,令对方在指定时间运行指定命令。有点像木马,嘿嘿。要求连接成功。因为节约变量,所以引用了前面的暂不使用的变量。好习惯。哈哈。

step111:telnet。远程telnet。不要说你一点都不知道,语法如示并请自查帮助。

step112:更改主IP。主要是为了使我们的使用方便,对某个特定IP段探测能够简化输入。如主IP改成“172.16.130.”,那么专门对130探测,而且输入IP时只需输入最后位,嘿嘿,多方便啊。

step113:任意命令。主要是接受用户输入并执行用户的输入罢了,结构如示。

本机信息段:
主要是对本机信息的一些查询语法。

stepm1:ipconfig,不说了。
但请注意到,在功能界面的实现上有一点,“&”符号,因为“&”符号在CMD下是命令连接符,如果光用“&”会让BAT误解为其后的都是命令。但我们只是希望输出一个“&”罢了,于是用“^”符号连接符表明只是输出“&”,而不是实现命令连接。
这里提一下“&”命令连接符,
例如:echo frist&echo second.同效于:
echo frist
echo second.
只是实现结合两行命令在同一行实现。类如一个很简单的批处理啦。

再提一下“^”符号连接符,对一些特殊符号可能在CMD下无法正确如愿显示,可用“^”连接,以达到如期效果。

用了“^”在文本中占了一位空间,但在输出时它并不显示,所以注意界面的布置。

stepm2:本机进程。利用命令行下的进程工具查看进程。要求pslist程序支持。

stepm3:本机用户。就是查询一下本机用户,也许会发现机了被动过的痕迹。

stepm4:结束进程。在命令行下结束本机进程。要求有pskill程序支持。

stepm5:本机端口。也许能看出被攻击或被入侵的痕迹。语法如示。

stepm6:共享情况。看看本机的共享是否真的如你所想,如你所见。否则请注意安全喽。语法如示。

stepm7:启动项值。在命令行下导出启动项值并给出结果。比魔法兔子什么的快多了,就是界面不是很好看,呵呵。语法如示。

stepm0:退出程序。退出。

小结:到此,您学习过了一些有用的命令与应用。以及大部分的网络命令与外部程序的使用。接下来你可以模拟IP小工具写出适合更自己的IP小工具哦。注意每执行完一项功能后要用goto返回功能界面,否则脚本无条件向下继续执行。
;errorlevel的应用。在BAT中,errorlevel的作用很大,大家在使用过程中通过多次接触,感受一下如何玩转errorlevel。在执行完一个程序后,可以用echo %errorlevel%查看程序运行后是如何设定errorlevel的值。
;if的应用。在BAT中,if语句的作用也很大,特别与errorlevel结合实现自动判断。以及一些基本条件判断。请查看"if /?"学习更详细的说明。
;变量的接受与传递。这方面的感觉需要大家多写BAT才能有所感触。如何合理与高效的应用变量,能使你的脚本更加漂亮。
计算机语言都是实践性很强的,我们学习理论只是基础,通过大量的实践才能真正掌握一门语言的应用。


第三节:(一些应用技巧与命令)
接下来我们看我的“代理服务器搜索组件 (ver 2.1)”,
1.“>”与“>>”的区别。
“>”--把指定数据传送到指定文件或区域。有覆盖作用,从文件头开始重写文件。如指定文件不存在,则新建文件并存入指定数据。
“>>”--以追加方式将指定数据传送到指定文件或区域。从文件结尾开始写入指定内容。
这两个功能有区别,请注意选择合适的传送方式传送数据。
例如:“echo 文本内容。>link.txt”与“echo 文本内容。>>link.txt”。若本不存在文件link.txt或文件link.txt内容为空,那么两条命令的运行结果相同。但如果link.txt不为空,那么第一条命令将清除link.txt所有内容并存入数据“文本内容。”保存。而第二条命令只在link.txt的文件尾(另起一行,注意每一个“>>”都会另起一行写入新数据)追加数据“文本内容。”而以前的内容保持不变。
还要特别提一个前面说过的“丢弃”用法“>nul”,因为我们有时候只需要命令的运行而并不需要看到命令的运行结果以及回显,但这些命令又会出现我们并不需要看到的回显,影响美观。故在其后追加“>nul”,丢弃回显。

2.循环语句的说明。
例2:
:puship
set /p tip=
if %tip%==%tbip% goto step1
set tbip=%tip%
echo %tip% >>link.txt
goto puship

本例中“if %tip%==%tbip% goto step1”与“if %tip% equ %tbip% goto step1”效果一样。
本例的作用是接受用户帖入数据。关键技术在于:因为用户帖入数据我们不能使用户每次输入都询问是否结束,而需要实现“智能化”的判断,但如何以最少的代码、最简单的方法实现所谓的“智能化”呢。分析用户输入情况:因为一般用户帖入数据都不会出现重复,所以我们利用这个特点,分析用户的数据,当用户帖入列表时,分析数据并将数据存入相应文本,以备后用。当用户粘帖文本结束后,再加一个回车,因为最后一次变量没有接受到任何修改,于是保持默认不变(也就是之前的数据。),再通过我们之前的数据备份对照,分析是否不变,是,则跳出循环。这样,我们通过两个变量以一个IF比较实现相对简单的“智能化”。嘿嘿,这一点代码想了我一个小时。这么说不知道大家是否能理解。请仔细参透例2的技术要点。

3.“FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt) do (set /a Allip=Allip+1>nul)”
这句FOR语句是复杂的杂合语句。首先请用for /?查阅详细用法,这里不再复述。
但是特别要提一点的就是批处理与直接命令行下的CMD的区别在FOR语句上。批处理时,变量引用需要有两个“%”号,否则无法正确执行,而CMD下不用,只需一个“%”。
“set /a Allip=Allip+1>nul”--实现算术运算,变量Allip的自增,注意大小写。把回显“丢弃”。
本例实现对文件link.txt内容计数,忽略以“;”开头的行。这就是为什么我们在前面要用“echo ;:文本>link.txt”来创建文本的意义所在。

4.“call toping %%i”--从批处理程序调用另一个批处理程序。调用另一个批处理“toping.bat”(因为BAT可以直接运行所以不需要后缀BAT),并有参数传递。参数来自于FOR语句的提取。“FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt)”--从link.txt的每行中提取文本,从每行的开头第一个字符开始(tokens=1),以“:”界定提取结尾(delims=: )。把提取结果赋给变量i。

5.“type”--在命令行下显示指定文件的内容。相信大家应该很熟悉,不多说了。注意与“>或>>”的结合使用,或与其它操作符的结合使用。

6.“%1”--在CMD下,一个BAT能够接受同时9位的参数,“%1~%9”,分别对应给定的参数变量。“%0”,即是文件本身。我们在使用BAT的过程中会经常遇到两个或两个以上脚本间需要参数传递。那么请好好掌握这个用法,多说无益,需要大家在实践中积累经验。

7.再说一些比较边缘,但大家比较兴趣的命令。呵呵,不要做坏事。
net user admin 123 /add
net localgroup administrators admin /add
net localgroup users admin /del
net user admin /active:yes
net user
net user admin
net user admin /del
“net user admin 123 /add”--添加名为“admin”,密码为“123”的用户,如果“123”不写,则默认密码为空。
“net localgroup administrators admin /add”--将用户“admin”加入“administrators”组,嘿嘿,高权限。
“net localgroup users admin /del”--将“admin”从“users”组删除。呵呵,因为用户新加进去时都是“users”组,权限比较低,所以要从这个组跳出来,保证administrators组的权限正式发挥作用,如果不这么做,对方系统会默认你的最低权限。
“net user admin /active:yes”--怕没法使用没有启动,不要紧,激活这个帐号,嘿嘿。
“net user”--看看用户有多少哦。
“net user admin”--看看刚刚加的用户信息如何,是否如我所想,如我所愿呢。
“net user admin /del”--删除用户admin。有时候要把屁股擦干净的说。

小结:其实当前应用就这么点应该足够我们写出自己需要的BAT了,当然还有很多很多命令与使用方法我这里并没有提到,我写这些只是把大家带进门而已,至于如何修行,看大家自己的了。关键还是兴趣与大量的实践。

到此,如果你再写不出一个像点样的BAT来,只能证明你的能力有限或只能证明我的能力有限。但我真的不希望是我的能力问题,我的主旨还是希望大家能够对一门新语言产生一些兴趣并去学习它,仅此而已。谢谢看完我的啰嗦,并啰嗦到此结束。谢谢观看。欢迎对此进行讨论。欢迎指出错误并指教。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值