编写bat文件-阿里云开发者社区

开发者社区> 余二五> 正文

编写bat文件

简介:
+关注继续查看

教你起步<编写bat文件>

原文地址:传送门

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

第一节:(主要是一些界面形式功能的实现以及初始化)
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=同理。
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 gotoonerrorspno”--检验用户输入值是否大于9,是,则转到一个指定标志点。这里注意BAT中变量引
用时要在前后加“%”,但在if语句中可有可无,具体应用大家多写几遍就有体会。
12.“goto label”--无条件跳转到指定标志位并向后执行。BAT好像只有这么一个跳转语句了,作用不用我说,用了就知道。
注意不要构成死循环。
小结:到此,完成了颜色设置、注释版权说明、标题设置、变量初始化、欢迎信息、功能界面初始化、标志点设置(因为欢迎
信息只显示一次而功能界面要多次使用所以将标志点设置在欢迎信息的后面。)命令的接受与跳转。
;功能界面一般要用“tab”键调整相对位置,才能起到美观的效果。请多练习几遍领会。
;大家在写脚本过程中要注意标志点的设置位置,才能起到合适的效果。一般写过几个脚本会有些感受。
;接着接受用户输入后“cls”清屏开始执行指定功能。注意这个cls的作用。因为清屏可以在此时,也可以在每个命令执行之
前,但如果在每个命令执行之前用的请,那么要写的cls就多了,于是把cls写在这里合适,方便节约快捷。大家在写脚本时也
应当注意这方面的技巧,将使你写出更加高效节约方便的代码。在每次写完脚本后合理地整合一下自己的代码。能积累不少经
验。
;另外,鉴于部分人仍不知道如何建立BAT文件与运行,请:打开记事本,写入代码,保存,保存类型为“所有文件*.*”,文件名为“name*.BAT”。保存后,双击运行。因为一般BAT运行很快,所以你可能只看到窗口一闪就消失了,那么你可以在exit
之前加pause确保能看见运行结果。
到此,你应该能够写一个很简单的脚本了,实现一些界面控制。
例1:

1
2
3
4
5
6
@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 减少执行时间。将结果不回显
而通过管道命令“|”送给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:

1
2
3
4
5
:puship
set /p tip=
if %tip%==%tbip% goto step1
set tbip=%tip%echo %tip% >>link.txt
goto puship

本例中“if %tip%==%tbip% goto step与“if %tip% equ %tbip% goto step效果一样。
本例的作用是接受用户帖入数据。关键技术在于:因为用户帖入数据我们不能使用户每次输入都询问是否结束,而需要实现“
智能化”的判断,但如何以最少的代码、最简单的方法实现所谓的“智能化”呢。分析用户输入情况:因为一般用户帖入数据
都不会出现重复,所以我们利用这个特点,分析用户的数据,当用户帖入列表时,分析数据并将数据存入相应文本,以备后用
。当用户粘帖文本结束后,再加一个回车,因为最后一次变量没有接受到任何修改,于是保持默认不变(也就是之前的数据。
),再通过我们之前的数据备份对照,分析是否不变,是,则跳出循环。这样,我们通过两个变量以一个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~%,分别对应给定的参数变量。“%0”,即是文件本身。我们
在使用BAT的过程中会经常遇到两个或两个以上脚本间需要参数传递。那么请好好掌握这个用法,多说无益,需要大家在实践中
积累经验。
7.再说一些比较边缘,但大家比较兴趣的命令。呵呵,不要做坏事。

1
2
3
4
5
6
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。










本文转自 qq414207614 51CTO博客,原文链接:http://blog.51cto.com/skytina/1340431,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MyBatis Generator XML 配置文件参考
在最常见的用例中,MyBatis Generator(MBG)由XML配置文件驱动。配置文件告诉MBG:如何连接到数据库什么对象要生成,以及如何生成它们什么表应用于生成对象以下是一个示例MBG配置文件。
694 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9844 0
使用批处理(.bat)文件一键编译 .NET CORE 网站并发布至 IIS
向 IIS 发布网站的传统方式是:开发人员在开发机上对项目源代码编译并将生成的程序集复制到服务器上的网站目录中.在 .NET CORE 时代开启后,复制操作很容易因为文件占用而失败.
40 0
批处理:遍历输出指定后缀格式的文件名.bat
批处理:遍历输出指定后缀格式的文件名.bat 1 @echo off 2 type nul >C:\result.txt 3 for /r "d:\我的文档\桌面\交接\webservice\Webservice项目" %%a in (*.pdf) do ( 4 >>C:\result.txt echo %%~dpa%%~nxa 5 ) 自己新建一个文本文档,然后将上面的代码贴进去,之后将txt重命名为.bat后缀,双击bat脚本,即可在C盘的result.txt里面,看到你想要的结果。
1252 0
bat批量去除文件首行和合并到文件
bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n+=1&goto 3) set file=%n%.
679 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13572 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载