1、DOS Batch File Command/Format Introduction,目录,一.简单批处理命令 3 二. 高级批处理命令 11 三.批处理参数应用 25 四.批处理组合命令 27 五.批处理管道命令 31 附 常用DOS命令汇总 35,一. 简单批处理命令,返回目录,1.Echo 命令 打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 即当程序运行前加上Echo命令和参数,则显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显 语法: echo onoff message echo 表示显示此命令后的字符 echo off 表示
2、在此语句后所有运行的命令都不显示命令行本身 Sample:echo off hello world Echo hello world 在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用 )结合来实现输入一些命 令到特定格式的文件中.这将在以后的例子中体现出来。 Sample: echo Audio test pass TestPASS.txt,2. 抑制命令回显的符号 表示不显示后面的命令, Sample1:echo off echo Now initializing the program, please wait a minite. Sample2: Study1.batda
3、teTime运行Study1.bat 并于下面的做比较Study2.batDateTimeStudy3.batecho offdatetime实际运行结果 Study1.bat=study3.bat,Echo OFF 与 区别虽然 与Echo off都可以抑制回应,但使用中两者还是存在区别 1. 首先, 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行 2. 只能抑制其后紧跟的命令或字符显示其有效只能控制一行,如果程序很长,有要 求运行时都不能显示出来,则每条命令前都要加上 而Echo off则会控制其后所有批次命令执行时的回应动作,3. Call 命令 从一个批处理程序
4、中调用另一个批处理程序,而不会引起第一个批处理的中止。 语法 CALL drive:pathfilename batch-parameters 参数 drive:pathfilename 指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。 Sample: Test1.bat echo off Echo this is test1 Call test2.bat Echo test1 again Test2.bat echo off Echo -This is test2! 执行Test1.bat,结果如下 This is test1 -This is test2! Test1
5、 again,4. PAUSE 暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处 理程序中使用该命令。 语法PAUSE 运行 Pause 命令时,将批处理将暂停继续执行,并显示下面的消息: Press any key to continue . . . Sample: echo off :begin copy a:*.* d:back echo Please put a new disk into driver A pause goto begin 此批处理为从drive A copy文件至D:back,当copy完成后程式暂停并提示用户插入新盘,OK后按任意键继续执行
6、,4. REM 命令 注释命令,在C语言中相当与/*-*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。 Rem Message Sample:Rem Here is the description.,5. Start 批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令 start explorer d:调用图形界面打开D盘 echo offcd /d %dp0regedit /s Audio.reg start Audio.exe 不加 start 命令的话,“Audio“运行时,后面会有个黑乎乎的cmd窗口,二. 高级批处理命令,返回目录,1. I
7、F if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三 种格式: 第一种格式 if not “参数” = “字符串” 待执行的命 IF NOT string1=string2 command 参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。 例:if “%1“=“a“ format a: 注意事项 1.) 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种“防空”字符 2.) string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量 3. )command 不是语法所必须的, string2
8、 后跟一个空格就可以构成一个有效的命令行,第二种格式 if not exist 路径文件名 待执行的命令 如果有指定的文件,则条件成立,运行命令,否则运行下一句。 如: if exist c:config.sys type c:config.sys 表示如果存在c:config.sys文件,则显示它的内容。,第三种格式 if errorlevel 待执行的命令 很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则
9、条件成立,运行命令,否则运行下一句。 如if errorlevel 2 goto x2 返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式: if errorlevel 1 set el=1 if errorlevel 2 set el=2 if errorlevel 3 set el=3 if errorlevel 4 set el=4 if errorlevel 5 set el=5 . 当然, 也可以使用以下循环来替代, 原理是一致的: for
10、%e in (1 2 3 4 5 6 7 8.) do if errorlevel %e set el=%e,出现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而由于 set命令的 “重复“ 赋值特性, 由大到小排序会导致较小的返回码 “覆盖“ 较大的返回码. 另外, 虽然 if errorlevel= command 也是有效的命令行, 但也只是 解释命令行时将 = 作为命令行切分符而忽略掉罢了 获取DOS程式运行 Errorlevel 方法 Echo %errorl
11、evel% 文本文件,2.Goto 指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。 语法:goto label (label是参数,指定所要转向的批处理程序中的行。) Sample: if %1= goto noparms if %2= goto noparms(如果这里的if、%1、%2不明白的话,先跳过去,后面会有详细的解释。) Rem check parameters if null show usage :noparms echo Usage: monitor.bat ServerIP PortNumber goto end 标签的名字可以随便起,但是最好是有意义的字母,字
12、母前加个:用来表示这个字母是标签,goto命令 就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。,Sample 建立TEST6.BAT,文件内容如下: ECHO OFF IF EXIST C:AUTOEXEC.BAT GOTO _COPY GOTO _DONE :_COPY COPY C:AUTOEXEC.BAT D: :_DONE 注意事项 (1) 标号(即标签)前是ASCII字符的冒号“:”,冒号与标号之间不能有空格。 (2) 标号的命名规则与文件名的命名规则相同。标签不能以大多数的非字母数字字符开始, 而文件名中则可以使用很多 (3) DOS支持最
13、长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。,3. Forfor 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。 For 命令语法格式: 1.)for %variable%variable in (set) do command CommandLineOptions %variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。 command 指定对每个文件执行的命令。 command-paramet
14、ers 为特定命令指定参数或命令行开关。 在批处理文件中使用 FOR 命令时,指定变量请使用 %variable 而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I 。,For get Help, please Key: /?,2.)如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持: FOR /D %variable IN (set) DO command command-parameters 3.)如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。 FOR /R drive:path %variable IN (set) DO command
15、command-parameters 检查以 drive:path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用 当前目录。如果集仅为一个单点(.)字符,则枚举该目录树,4.)FOR /L %variable IN (start,step,end) DO command command-parameters 该集表示以增量形式从开始到结束的一个数字序列。 For /L %e In (1,1,5) Do command 这句话的意思就是从1(start)开始增加,每次增加1(step),一直到变到5(end)为止 因此,(1,1,5) 将产生序列 1 2 3
16、4 5,(5,-1,1) 将产生 序列 (5 4 3 2 1)。,5.)FOR /F “options“ %variable IN (file-set) DO command FOR /F “options“ %variable IN (“string“) DO command FOR /F “options“ %variable IN (command) DO command 以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白 行。您可通过指定可选 “options“ 参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同 解析选项的关键字 sample1: FO
17、R /F “eol=; tokens=2,3* delims=, “ %i in (myfile.txt) do command,Sample 建立C:TEST7.BAT,文件内容如下: ECHO OFF FOR %C IN (*.BAT *.TXT *.SYS) DO TYPE %C 运行: C:TEST7 执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。,4. choice 命令 choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234
18、 如:,choice /c:dme defrag,mem,end 将显示 defrag,mem,endD,M,E? Sample: Sample.bat的内容如下: echo off choice /c:dme defrag,mem,end if errorlevel 3 goto defrag (应先判断数值最高的错误码) if errorlevel 2 goto mem if errorlevel 1 goto end :defrag c:dosdefrag goto end :mem mem goto end :end echo good bye,此文件运行后,将显示 defrag,me
19、m,endD,M,E? 用户可选择d m e ,然后if语句将作出判断, d表示执行标号为defrag的程序段, m表示执行标号为mem的程序段, e表示执行标号为end的程序段, 每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束,5. Setset设置变量 引用变量可在变量名前后加 % ,即 %变量名% set #显示目前所有可用的变量,包括系统变量和自定义的变量 echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用 set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1 set p=aa1b
20、b1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2 echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2 echo %p:6% #显示变量p中第6个字符以后的所有字符,即aa2bb2 echo %p:6,3% #显示第6个字符以后的3个字符,即aa2 echo %p:0,3% #显示前3个字符,即aa1,echo %p:-2% #显示最后面的2个字符,即b2 echo %p:0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b echo %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2 echo
21、 %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2 echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2 set p=%p:*bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2 set /a p=39 #设置p为数值型变量,值为39 set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10 #用 /a参数时,在 = 后面的变量可以不加%直接引用set /a p=“1&0“ #“与“运算,要加引号。其它支持的运算符参见,set/? se
22、t p= #取消p变量 set /p p=请输入屏幕上显示“请输入“,并会将输入的字符串赋值给变量p注意这条可以用来取代 choice 命令 注意变量在 if 和 for 的复合语句里是一次性全部替换的,如 echo off set p=aaa if %p%=aaa ( echo %p% set p=bbb echo %p% ),结果将显示aaaaaa因为在读取 if 语句时已经将所有 %p% 替换为aaa这里的“替换“,在 /? 帮助里就是指“扩充“、“环境 变量扩充“可以启用“延缓环境变量扩充“,用 ! 来引用变量,即 !变量名! echo off SETLOCAL ENABLEDELAY
23、EDEXPANSION set p=aaaif %p%=aaa ( echo %p% set p=bbb echo !p! ),ENDLOCAL 结果将显示aaabbb 还有几个动态变量,运行 set 看不到 %CD% #代表当前目录的字符串 %DATE% #当前日期 %TIME% #当前时间 %RANDOM% #随机整数,介于032767 %ERRORLEVEL% #当前ERRORLEVEL 值 %CMDEXTVERSION% #当前命令处理器扩展名版本号 %CMDCMDLINE% #调用命令处理器的原始命令行可以用echo命令查看每个变量值,如 echo %time%注意 %time% 精
24、确到毫秒,在批处理需要延时处理时可以用到,三. 批处理命令参数应用,返回目录,批处理中可以使用参数,参数表示符“%“. 参数后紧跟数字,一般从1%到 9%这九个,“%0”表示命令本身。 C:根目录下一批处理文件名为b.bat,内容为: echo off Type %1 Type %2 那么运行C:b a.txt b.txt %1 : 表示a.txt %2 : 表示b.txt 当有多个参数时需要用shift来移动,sample1:fomat.bat echo off if “%1“=“a“ format a: :format format a:/q/u/auotset echo please i
25、nsert another disk to driver A. pause goto fomat,如果用set设置了变量那么需要调用变量时应该使用%.%将变量括起来,比如: echo off set a=10 echo %a% pausenul,四. 批处理命令组合应用,返回目录,1.& Usage:第一条命令 & 第二条命令 & 第三条命令. 用这种方法可以同时执行多条命令,而不管命令是否执行成功 Sample: C:dir z: & dir c:Ex4rch,2.& Usage:第一条命令 & 第二条命令 & 第三条命令. 用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面
26、的命令,如果一直没有出错则 一直执行完所有命令; Sample: C:dir z: & dir c:Ex4rch The system cannot find the path specified. C:dir c:Ex4rch & dir z: 在做备份的时候可能会用到这种命令会比较简单,如: dir file&:/192.168.0.1/database/backup.mdb & copy file&:/192.168.0.1/database/backup.mdb E:backup 如果远程服务器上存在backup.mdb文件,就执行copy命令,若不存在该文件则不执行copy命令。这种
27、用法可以替换IF exist了,3. Usage:第一条命令 第二条命令 第三条命令. 用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的 命令则一直执行完所有命令; Sample: C:Ex4rchdir sometips.gif del sometips.gif sample: copy trojan.exe %1admin$system32 & if not errorlevel 1 echo IP %1 USER %2 PASS %3 victim.txt,五. 批处理管道命令,返回目录,1. 命令 Usage:第一条命令 第二条命令 第三条命
28、令. 将第一条命令的结果作为第二条命令的参数来使用 sample: time /tD:IP.log netstat -n -p tcpfind “:3389“D:IP.log start Explorer,2.、输出重定向命令 将一条命令或某个程序输出结果的重定向到特定文件中, 与 的区别在于,会清除原有文件中的内容后写入指定文件, 只会追加内容到指定文件中,而不会改动其中的内容。 sample1: echo hello worldc:hello.txt (stupid example?) sample2: 对所有EXE和DLL文件作一个记录: 运行CMD-转换目录到system32-dir
29、*.exeexeback.txt & dir *.dlldllback.txt,3.& 、& 将一个句柄的输出写入到另一个句柄的输入中。 & 从一个句柄读取输入并将其写入到另一个句柄输出中。,附 常用DOS命令汇总,返回目录,DIR 显示目录下文件 参数 /P /W /S Tree 以树形结构显示目录及文件参数-f 将列出第个文件夹中文件名称 CLS 清屏,将DOS提示符回到屏显最前端 CD/CD 目录返回,切换,改变 Copy 文件Copy 命令 MD 创建新子目录 RD 删除子目录 Rename 重命名 Del 文件删除 参数/S /Q /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除 Type显示文本文件的内容 Path 为可执行文件设置一个路径 Find 在指定文件名内部搜寻字符串 Net 网络操作,Del Tree 删除整个目录及目录下文件 Format /q /u /s /n:sectors /f:size /c 磁盘格式化命令 Move y/-y filename1 filename2 将文件1移动到文件2处 Edit 文本编辑 Fdisk 硬盘分区 Sys 制作DOS系统盘 Debug 分析诊断工具,End,