编写批处理(bat文件)
上一篇 / 下一篇 2011-07-15 11:48:44 / 个人分类:操作系统之windows
一:如何创建批处理文件?
将记事本打开,什么都不用写,然后选择文件->保存.保存类型选择所有文件,文件名则命名为 *.bat这个*代表是文件名,你可以随便的起.保存好之后,看看你保存的地方,会出现一个白色窗口里有个黄色齿轮的图标.这东西就是你创建的批处理文件,双击他就可以运行,但他现在由于里面没有输入任何命令,所以他运行了并不会做任何事情.当我们想往这个*.bat文件中添加东西时,只要右键选择他,然后选择编辑,就可以打开记事本往内输入命令了.
二:批处理文件中的命令是什么?
除运行dos命令之外,他还可以支持选择结构if,循环结构for,goto等,以下逐一说明批处理语法:
2.1)Echo命令
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置。
语法:echo [{on|off}] [message]
Example:
echo off
echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中。这将在以后的例子中体现出来。
2.2)@命令
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。@不是一个命令,而是DOS批处理的一个特殊标记符,仅用于屏蔽命令行回显.
Example:@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset
(format这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)
--------------------------------------2.1与2.2结合示例-----------------------------------
如果我们先创建一个run.bat文件,往里面输入:
dir然后保存在c:\下.然后我们运行cmd,进入c盘根目录下,输入run.bat,则显示:
C:>dir
驱动器C中的卷没有标签。
卷的序列号是0C5D-07FF
C:的目录
2004-08-25 00:45 <DIR> WINDOWS
2004-08-25 00:51 <DIR> Documents and Settings
...........
C:
如果将run.bat内容修改成
echo off
dir
然后再在cmd里输入run.bat,则会显示
C:>echo off //因为运行了echo off,所以没有显示dir命令,直接显示了结果
驱动器C中的卷没有标签。
卷的序列号是0C5D-07FF
C:的目录
2004-08-25 00:45 <DIR> WINDOWS
2004-08-25 00:51 <DIR> Documents and Settings
.....
C:
如果将run.bat文件修改成:
@echo off
dir
则显示成:
C:>run.bat //与前面不同,并没有显示echo off,原因是加了@,所以不显示@后面的内容.
//又因为加了echo off,所以后面的命令不显示,直接显示结果
驱动器C中的卷没有标签。
卷的序列号是0C5D-07FF
C:的目录
2004-08-25 00:45 <DIR> WINDOWS
2004-08-25 00:51 <DIR> Documents and Settings
....
注:一般习惯上编写bat或者cmd时,第一行都是@echo off,这样悄无声息的关掉了接下来所有命令行的回显。最后一行echo on还原。echo可以查看现在的回显状态是开还是关。
2.3) Call命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call命令接受用作调用目标的标签。如果在脚本或批处理文件外使用Call,它将不会在命令行起作用.
语法:
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数
[Drive:}[Path] FileName
指定要调用的批处理程序的名字及其存放处。文件名必须用.bat或.cmd扩展名batch-parameters 指定批处理程序所需的命令行信息。 指定要调用的批处理程序的位置和名称。filename参数必须具有.bat或.cmd扩展名。
Example:假如有2个批处理文件a.bat和b.bat.如果想在运行a.bat的当中运行b.bat.如何运行呢?其实很简单,只要在a.bat文件中输入call命令,则可以在不终止a.bat的情况下运行b.bat。等b.bat运行完之后,继续执行a.bat。
--------------file:a.bat--------------------------
echo this is a.bat
call d:b.bat
echo done