批处理每日一学(2013.2.25更新).doc_第1页
批处理每日一学(2013.2.25更新).doc_第2页
批处理每日一学(2013.2.25更新).doc_第3页
批处理每日一学(2013.2.25更新).doc_第4页
批处理每日一学(2013.2.25更新).doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常用命令1.rem和:2.echo和3.pause4.title(不常用)5.color(不常用)6.errorlevel及其他常用命令的返回值(backup、diskcomp、diskcopy、format、xcopy)7.exit与goto :eof8.copy与xcopy9.del与erase10.setloacl与变量延迟(setlocal enabledelayedexpansion启动变量延迟)11.for命令详解12.SET语句详解13.find和findstr在文件中搜索字符串14.replace:文件替换15.START启动一个单独的窗口运行指定的程序或命令16.关闭或重启计算机:shutdown17.显示进程清单:tasklist18.关闭指定进程:taskkill19.查看IP配置信息:ipconfig20.调用子过程或外部程序:call1.rem和:(注释命令:给程序加上注解,该命令后的内容不被执行)Rem和:用法一样,但关键区别在与“回显”,即运行中的命令是否被显示;Rem可以回显,而:则不能回显;另外以“:”开头的字符行,在批处理中都被视作标号,而直接忽略其后的所有内容;Rem在某些场合比:更为适用;同样,rem可以用于config.sys文件中。有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 : 常被用作注释符号,其实 :+ 也可起注释作用。编辑于2012.6.102.echo和(打开或关闭回显)Echo off :关闭之后命令的回显; :关闭当前命令的回显;常用echo off关闭回显;回显:关闭回显:Echo. :输出空行,其中“”可以用,:;”等任一符号替代;Echo 文件内容文件名,Echo 文件内容文件名;Echo 提示信息。编辑与2012.6.113.pause(停止系统命令的执行并显示:请按任意键继续. . . )与nul的应用如果不想显示“请按任意键继续. . .”,则pause nul ,即只有光标闪,等待下一步。Echo 其他提示语& pausenulnul 或者 1nul 作用是屏蔽成功执行命令的输出内容(用于echo等其他命令之后)2nul 作用是屏蔽命令执行失败的输出内容1nul 2nul 作用是屏蔽的所有输出提示 不论正确与否echo offecho 在批处理中回显信息有两个命令,echo和set /p=nul,它们的共同点在于都是对程序执行信息的屏幕输出,区别在于echo是换行输出,而set /p=nulpauseset /p=bathomenulset /p=batmannul更新于2012.7.24.title(设置cmd窗口的标题)title 学习之路(可以看到cmd窗口的标题栏变了) 编辑于2012.6.115.color(不常用,设置默认的控制台前景和背景颜色)color attrattr 指定控制台输出的颜色属性颜色属性由两个十六进制数字指定:第一个为背景,第二个则为前景。每个数字可以为以下任何值之一: 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(在亮白色上产生亮红色)编辑于2012.6.126.errorlevel(程序返回码)及其他常用命令的返回值(backup、diskcomp、diskcopy、format、xcopy)echo %errorlevel% 每个命令运行结束,可以用这个命令行格式查看返回码,用于判断刚才的命令是否执行成功。默认值为0,一般命令执行出错会设 errorlevel 为1。以下就是几个常用命令的返回值及其代表的意义: 1)backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用ctrl-c中止备份 4 由于致命的错误使备份操作中止 2)diskcomp 0 盘比较相同 1 盘比较不同 2 用户通过ctrl-c中止比较操作 3 由于致命的错误使比较操作中止 4 预置错误中止比较 3)diskcopy 0 盘拷贝操作成功 1 非致命盘读/写错 2 用户通过ctrl-c结束拷贝操作 3 因致命的处理错误使盘拷贝中止 4 预置错误阻止拷贝操作 4)format 0 格式化成功 3 用户通过ctrl-c中止格式化处理 4 因致命的处理错误使格式化中止 5 在提示“proceed with format(y/n)?”下用户键入n结束 5)xcopy 0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误 7.exit与goto :eof(退出脚本文件)Exit /B exitCodeExit退出cmd.exe程序或当前批处理脚本;Exit /b退出当前批处理脚本,而不是cmd.exe,如果是从一个批处理脚本外执行,则会退出cmd.exe;A.在 CMD 命令提示符窗口直接运行:1.) 运行 Goto :eof 后,CMD 返回并将等待下一命令。 2.) 运行 Exit 后,CMD 将直接关闭并返回到曾启动 Cmd.exe 的程序或返回到“资源管理器”。3.) 运行 Exit /b 后,CMD 将直接关闭并返回到曾启动 Cmd.exe 的程序或返回到“资源管理器”。B.在批处理的最后一个执行语句里使用:1.) 使用 Goto :eof ,双击该批处理,运行完成后 CMD 窗口关闭;在 CMD 中运行此批处理,运行完成后 CMD 返回并将等待下一命令。2.) 使用 Exit ,双击该批处理,运行完成后 CMD 窗口关闭;在 CMD 中运行此批处理,运行完成后 CMD 将直接关闭并返回到曾启动 Cmd.exe 的程序或返回到“资源管理器”。3.) 使用 Exit /b ,双击该批处理,运行完成后 CMD 窗口关闭;在 CMD 中运行此批处理,运行完成后 CMD 返回并将等待下一命令。C.在 Call 的子标签中:1.) 使用 Goto :eof ,将返回到 call 命令,for 也将继续循环迭代。2.) 使用 Exit ,批处理将被直接退出,不能返回到 Call ,for 循环迭代被终止。3.) 使用 Exit /b ,将返回到 call 命令,for 也将继续循环迭代,类似于Goto :eof。echo offfor /l %i in (1 1 3) do call :king%iPause & goto :eof:king1echo 执行了:king1,引用goto :eof,转for语句的下一条pausegoto :eofecho 无法显示语句1:king2echo 执行了:king2,引用exit /b,转for语句的下一条pauseExit /becho 无法显示语句2:king3echo 执行了:king3,将直接退出pauseExitecho 无法显示语句3D.特例:有一些情况下,在 CMD 窗口下运行 Exit 并不是退出 CMD ,例如:在Ftp 子系统中,运行 ! ,从 ftp 子系统临时退出到命令提示符下,这时运行 Exit ,将返回到 ftp 子系统。在命令提示符下嵌套新实例 CMD.exe 时,运行 Exit 关闭嵌套的命令行解释器,而不是父命令行解释器。E.关于 goto : eof (End Of File, 跳转到批处理文件结尾)的详解:功能:可以在不定义标签的情况下将控制传送到当前批处理脚本文件的末端。注释: 必须满足以下两个条件。1.) 启用了命令扩展(即默认状态)。2.) 使用 goto 和 :EOF 标签时,必须在标签前插入冒号。F.关于 exit /b ExitCode 的详解:功能: Cmd.exe 将 ERRORLEVEL 设置为指定的 ExitCode。如果退出 Cmd.exe,Cmd.exe 则使用指定的 ExitCode 设置进程退出代码。exitCode指定一个数字号码,如果指定了 /B,将errorlevel设定成那个数字,如果退出cmd.exe,则用那个数字设定过程退出代码。编辑于2012.07.158. copy与xcopycopy,中文含义为“复制”,一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy 源文件 目的路径。假设,你需要把d:testtest.txt这个文件复制到D盘根目录下,那么,使用 copy d:testtest.txt d: 就可以轻易办到。如果D盘根目录下已经存在了一个名为test.txt的文件,那么,复制过去的时候,copy命令就会提示你是覆盖原文件、是放弃复制还是覆盖所有文件。如果你在批量复制的时候,一概覆盖原文件,那么,一个一个地选择十分麻烦,这个时候,你可以使用不加提示就覆盖原文件的参数 /y (相当于自动选择了Yes选项),完整的命令为 copy /y d:testtest.txt d: 。如果复制的时候,你还需要把源文件改个名,比如把test.txt改为1.txt的时候,可以直接使用:copy d:testtest.txt d:1.txt 这样的命令,也就是说,在指定目的路径的时候,直接指定文件名,那么,新的文件名就是源文件复制之后的名字。如果要复制的路径带有空格、&等特殊符号的时候,请使用引号把这些特殊字符括起来,比如: copy d:test abctest.txt d:t&estcopy命令除了“复制”文件的功能外,还有一个绝活:合并多个文件为一个文件,具体的格式为:copy 文件1+文件2+文件3+ 目的路径新文件名 。例如:copy d:test.txt+d:abc.txt d:testtest.txt,那么,就把D盘根目录下的test.txt和abc.txt两个文件的内容合并为test.txt,并保存到d:test目录下。copy 命令格式:copy /y/-y/v /Bcopy /y 不加提示,对所有文件加以覆盖/-y 加以提示,对所有文件 (yes或no提问 )/v 拷贝以后加以校验/B 按二进制进行显示copy w1.wps con/b 可以将wps文件在屏幕上显示,而不必进入wps状态copy .98 将父目录下的98子目录下的所有文件全拷到当前子目录copy .97 当当前目录下的97子目录下文件全部拷到当前目录copy . c: 将当前目录下的所有文件拷到c盘根目录. 意味着 *.* 文件copy nul a.abc 将a.abc 文件清空(文件长度改为0)copy 文件名+con 向文本文件中追加命令或内容copy con 文件名 创建文本文件(F6存盘退出)copy con prn 检测打印机的开关 必须注意的是,copy只能复制文件,对于文件夹的复制,则需要另请高明,动用xcopy来复制。xcopy是copy的高级版本,有更丰富的参数,能实现更加复杂的功能,通吃文件和文件夹的复制,以后将另行介绍,在这里就不展开讲解了。 9. del与erasedel命令的用法很简单,使用 del 文件路径 的格式就可以了。比如,想删除D盘根目录下的test.txt,使用del d:test.txt即可。1)如何删除具有隐藏属性、只读属性或者系统属性的文件,在del后加上一些辅助参数了,隐藏属性是hidden,使用del /a:h,只读属性是read,使用del /a:r,系统属性是system,使用del /a:s,/a是根据属性选择要删除的文件。因此,如果不知道文件是什么属性,那么,使用del /a即可不过有一种情况是例外,当文件具有只读属性的时候,还得添加 del /a /f 参数,/f 参数表示强制删除只读属性文件的意思,f取自force,也就是强制的意思。2)有段时间,威金病毒肆虐网络,以摧枯拉朽之势毁灭了不少文件,其中,最关键的一点是在每个目录下生成了一个desktop.ini文件,只要把这些desktop.ini文件删除,这个病毒就没有了危害性。要删除每个目录下的desktop.ini文件,如果点开一个个的子文件夹删除的话,将不胜其烦,如果使用del命令,简单的一条语句就可以搞定,那就是:在指定目录下执行 del /a /f /s desktop.ini 命令。在这里,/s 表示搜索当前目录下的所有子文件夹,并删除指定文件的意思,s取自sub,表示“从属的”、“子目录的”的含义。3)在执行删除操作的时候,需要小心谨慎,如果需要在删除之前进行确认的话,可以添加一个参数:/p。4)如果删除并不需要逐一确认的,可以选择静默删除模式,这时候,需要使用参数:/q,也就是 quiet 的缩写形式。10.setloacl与变量延迟(setlocal enabledelayedexpansion启动变量延迟)让我们先了解一下批处理运行命令的机制:批处理读取命令时是按行读取的(另外,例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。举个例子说明一下:例1: echo off set a=4 set a=5 & echo %a% pause 结果:4例2: echo off setlocal enabledelayedexpansion set a=4 set a=5 & echo !a! pause 结果:5解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了。以上为其他给出的解释,但个人认为,在复合语句才会变量延迟,变量延迟的作用,说简单点,就是将“复合语句”拆分成“单条语句”,即实现了“延迟”,再进行赋值预处理。复合语句,凡是()里的所有命令或这通过管道命令&连接起来的命令(形如 set abc=123&echo %abc%)都叫“复合语句”。在复合语句中才要使用延迟变量,cmd在处理“复合语句”的时候,如果“复合语句”中用到了变量,会把变量的值当作复合语句之前变量的值来引用。如果在此之前变量没有被赋值,就把它当成空值。当变量的值是空值的时候,只执行echo的命令,显示“echo处于打开状态/echo处于关闭状态”,而不显示变量。当然,如果没有使用变量延迟,也会有如下交换的效果。 例3: echo off:目的:交换两个变量的值,但是不使用临时变量set var1=abcset var2=123echo 交换前:var1=%var1% var2=%var2%set var1=%var2% & set var2=%var1% 此句之前,进行赋值var2=123echo 交换后:var1=%var1% var2=%var2% 此句之前,进行赋值var1=123,var2=abcpause编辑于2012.7.3其他扩展应用,详见“例10.变量延迟setlocal语句.bat”,请大家自己运行,查看结果转义字符 的用法, 将“回车”转义成“空格”编辑于2012.7.911.for命令详解关于%的说明:批处理中的调用变量须“%”,而在CMD中运行该命令行只需要一个%号。基本格式:For 参数 %变量名 in (相关文件或命令) do 执行的命令rem 如果批处理中有2个%,在命令行里屏蔽1个%;如果是1个%,命令行直接屏蔽。echo 1set A=123:(A=123)set %B=345:(B=345)set %A=567:(%A=567)set %D=456:(%D=456)set %A=789:(%A=789)Pause参数:FOR有4个参数 /d /r /l /f%变量名:这个变量名可以是单个的小写a-z或者大写A-Z,区分大小写哦,FOR会把每个读取到的值给他!in:命令的格式,照写(相关文件或命令) :For要把什么东西读取然后赋值给变量do:命令的格式,照写执行的命令:对每个变量的值执行的操作For %variable in (set) do command command-parameters%variable指定一个单一字母可替换的参数。(set) 指定一个或一组文件。可以使用通配符。Command指定对每个文件执行的命令。command-parameters为特定命令指定参数或命令行开关。一、参数 /d (如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配;通配符包括*和?)FOR /D %variable IN (set) DO command command-parameters 如: echo offfor /d %i in (c:*) do echo %iPause运行后,把C盘根目录下的全部目录名显示,而文件名字一个也不显示。二、参数 /r (当前或者你指定路径下的文件名字全部读取,注意是文件名字)FOR /R drive:path %variable IN (set) DO command command-parameters检查以drive:path为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。如:echo off for /r c: %i in (*.exe) do echo %i Pause我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!用这条命令搜索文件真不错三、参数 /l (该集表示以增量形式从开始到结束的一个数字序列)FOR /L %variable IN (start,step,end) DO command command-parameters/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。如果迭代变量超过 End#,则命令解释程序退出此循环。FOR循环,前面是循环次数,后面DO括号内执行的语句为()的一条整句,因此变量在没有执行赋值的情况下,FOR语句预处理的赋值的变量为空值,执行echo命令,从而显示为“echo处于打开状态/echo处于关闭状态”。例: echo offsetlocal enabledelayedexpansionfor /l %i in (1,1,5) do (set a=%i & echo !a!) pause相当于(set a=1 & echo !a!set a=2 & echo !a!set a=3 & echo !a!set a=4 & echo !a!set a=5 & echo !a!)pause(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)四、参数 /f (使用文件解析来处理命令输出、字符串及文件内容)FOR /F options %variable IN (file-set) DO command command-parametersFOR /F options %variable IN (string) DO command command-parametersFOR /F options %variable IN (command) DO command command-parameters 使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量传递。请注意:在没有使用令牌选项时,/F 将只检查第一个令牌。 文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。eol=c- 指一个行注释字符的结尾(就一个)skip=n- 指在文件开始时忽略的行数。delims=xxx- 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n- 指每行的哪一个符号被传递到每个迭代的for本身。这会导致额外变量名称的分配,m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。Usebackq- 使用后引号(键盘上数字1左面的那个键)。未使用参数usebackq时:file-set表示文件,但不能含有空格,双引号表示字符串,即string,单引号表示执行命令,即command。使用参数usebackq时:file-set和file-set都表示文件,当文件路径或名称中有空格时,就可以用双引号括起来;当文件路径或名称中有空格时,就可以用双引号括起来,单引号表示字符串,即string,后引号表示命令执行,即command。编辑于2012.6.18五、变量延迟与FOR参数F上述已讲述,变量延迟中,符合语句所引用的变量,必须用“!”括起来,实例如下:例11-2.FOR参数F与变量延迟的综合应用.batecho offsetlocal enabledelayedexpansionfor /f tokens=* %1 in (abaacadaaeaf)do (set A=%1set A=!A:aa=!echo !A!for /f tokens=1-3 delims= %1 in (!A!)do echo %1 %2 %3)pausenul 当然,我们也可以不用变量延迟,通过call命令调用其他外部命令、语句,for /f tokens=* %1 in (abaacadaaeaf)do (set.=%1call set .=%.:aa=%for /f tokens=1-3 delims= %1 in (call echo %.%)do echo %1 %2 %3)pausenul 例1:代码: for /f skip=1 tokens=1,2* delims= %a in (a.txt) do echo %a %b %c先从引号内的东西讲起,很多新手对这些难以理解,因为 for /? 翻译的简直是一塌糊涂。skip=tokens=delims=这三项是用的最多的,根据需要。可以不用,可以一起使用,也可以只使用一个或两个。但是不管使用几个都要用引号将它们扩起来。当然不使用时,自然就不需要引号了。 skip=for循环文本内容是以行为单位,从上至下进行的,skip=1意识就是跳过文本的第一行,即不循环第一行。那么skip=2 自然就是跳过前两行了,依次类推. delims=后面的字符的意思是,将文本每一行的内容以delims=后面的字符分割成若干列。例2:假设a.txt某一行的内容是 111,222.333 444/555代码: for /f tokens=1-5 delims=,./ %a in (a.txt) do echo %a %b %c %d %e显示结果是 111 222 333 444 555解释:意思就是把111,222.333 444/555以,./和空格(不分先后)分成了5列.注意代码中/和后面有个空格,使用中要注意空格要放到最后,如delims=,. / 这样就不行了。那如果我们不使用逗号来分割会如何呢?如: delims=./ 那么就会分割成111,222 333 444 555看出区别了吗?delims=后面可以是多个字符,可以是空格,也可以什么都没有。什么都没有代表什么呢?就是不以任何东西为分割符,也是整行的内容了。For默认是以,;和“空格”作分割符的,所以一般要取得整行内容通常会用delims=这样的形式来取消for的默认分割符。 for语句将“空格、逗号、分号、等号”视作元素分隔符例3:A1:假设令 set str=I love,bbs;,请分别显示出I、love、bbs、bathome和net这五个字符串。目的:了解for语句用到了哪些符号作为元素的分隔符。A2:条件同A1,要求最后只显示net这个字符串。目的:了解for语句的执行流程。echo offset str=I love,bbs;for %i in (%str:.= %) do echo %i & set a=%iecho %a%pausenul显示结果是tokens=1-51-5很好理解就1至5,前面我们用delims=后面的字符为分割符,将文本内容分成了多列,那么你需要的是哪些列呢?用tokens=可以很好帮你提取到。以例2为例:通过dilims=,./ 将文本分成了111 222 333 444 555 五列。注意代码中前面有个%a 这里的%a就是代表第一列,第二列就是%b,第三列就是%c 依此类推.那么我们如果把echo %a %b %c %d %e 改为 echo %e %d %c %b %a 会如何呢?会显示: 555 444 333 222 111若是第一个%a把它改为%i也是一样,那么第二列就是%j.%k.依此类推.这里我们用的是tokens=1-5但是在例一中,我们用的是tokens=1,2* 有什么区别呢?其实差不多-号代表从几至几而逗号代表单一的,如 tokens=1,5就是代表第一列和第五列,而不是1至5列。*号代表剩下的所有的列.如:tokens=1,2*代表%a为第一列,%b为第二列,%c代表后面所有的列.。for /f 不但可以循环文本内容还可以循环字符窜,如:例4:代码: for /f tokens=1-3 delims=,./ %a in (111,222.333 444/555) do echo %a %b %c只要将()里的字符串用引号 扩起来,for就会把它当字符串来循环,而不是文本。编辑于2013.2.1812.SET语句详解一、用set命令设置自定义变量(显示、设置或删除 cmd.exe 环境变量)1.SET variable=string(variable:指定环境变量名string:指定要指派给变量的一系列字符串)备注:由于“=”为赋值的意思,因此SET 命令不允许变量名含有等号。例1: echo offset var=我是值echo %var%pause请看 set var=我是值,这就是BAT直接在批处理中设置变量的方法!set 是命令,var是变量名,=号右边的我是值是变量的值在批处理中,如果我们要引用或显示var变量名,用两个%(百分号)扩起来,如%var%2.SET /P variable=promptStringSET可以提供一个交互界面,让用户自己输入变量的值,然后再来根据这个值来做相应操作,这种语法,只需要加一个/P参数就可以了!例2:echo offset /p var=请输入变量的值:echo 您输入了 %var% _pauseset /p 是命令语法,var是变量名,=号右边的“请输入变量的值: ”,这个是提示语,不是变量的值!运行后,我们在提示语后面直接输入1,就会显示一行“您输入了 1 _” 二、用set命令进行简单计算3.语法:SET /A expression(/A 命令行开关指定等号右边的字符串为被评估的数字表达式)()-分组! - -一元运算符= *= /= %= += -=-算数赋值&= = |= =-二进制运算赋值-二进制逻辑移位& -二进制按位“与”-二进制按位“异” | -二进制按位“或”,-表达式分隔符set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算!例3:echo offset /p input=请输入计算表达式:set /a var=%input%echo 计算结果:%input%=%var%pause上面的例子是龙卷风设计的,很好用哟,请看下面几个运算过程:注意:DOS计算只能精确到整数* / %-算数运算符 + -算数运算符请输入计算表达式:10/3计算结果:10/3=3 #DOS计算精确到整数,小数舍了。请按任意键继续. . .请输入计算表达式:100%3 #求余数计算结果:100%3=1请按任意键继续. . .请输入计算表达式:(25+75)*2/(15+5)-20计算结果:(25+75)*2/(15+5)-20=-10请按任意键继续. . .注意:上面的计算过程显示,DOS计算只能精确到32位,这个32位是指二进制32位,其中最高位为符号位(0为正,1为负),低位31位为数值。31个1换成十进制为2147483647,所以DOS计算的有效值范围是-2147483648至2147483647,其中+0显示为0,-0显示为-2147483648;超出该数值范围时计算出错,请看下面的计算过程:最大值31个1加上1后,32位符号为1,所以显示结果为-2147483648。运行set /a a=1+1,b=2+1,c=3+1后会显示一个4,但我们用echo %a% %b% %c%后看结果,会发现其他数学运算也有效果!这就是逗号的作用!有时候我们需要直接在原变量进行加减操作就可以用这种语法set /a var+=1 这样的语法对应原始语法就是set /a var = %var% + 1set /a var*=2另外还有一些用逻辑或取余操作符,比如我们在CMD里输入set /a var=1 & 1 与运算,他并不会显示为1,而是报错,为什么?对于这样的逻辑或取余操作符,我们需要把他们用双引号引起来,也可以用转义字符,set /a var= 1 & 1,这样结果就显示出来了,其他逻辑或取余操作符用法set /a var= 1 + 1,异运算set /a var= 1 % 1,取模运算set /a var= 3 2,右移位运算,4的二进制为100,右移动2位为1,结果为1set /a var&= 1 等于set /a var = %var% & 1 注意引号思考:求任意一个数的n次方参考:例12-5SET语句的应用:任意一个数的N次方.bat三、用set命令进行字符串处理1、字符串替换:%PATH:str1=str2%(将字符串变量%PATH%中的str1替换为str2)例6:echo offset a= bbs. verybat. cnecho 替换前的值: %a%set var=%a: =%echo 替换后的值: %var%pause运行显示:替换前的值: bbs. verybat. cn替换后的值: 对比一下,我们发现他把变量%a%的空格给替换掉了,从这个例子,我们就可以发现%PATH:str1=str2%这个操作就是把变量%PATH%的里的str1全部用str2替换,比如我们把上面的例子改成这样:echo offset a=echo 替换前的值: %a%set var=%a:.=伤脑筋%echo 替换后的值: %var%pause运行显示: 替换前的值: 替换后的值: bbs伤脑筋verybat伤脑筋cn解释set var=%a:.=伤脑筋%set是命令,var是变量,a是要进行字符替换的变量的值,.为要替换的值,伤脑筋为替换后的值!2、字符串截取:%a:m,n%方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号可以简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)例7:echo offset a=set var=%a:1,2%echo %var%pause执行后,我们会发现只显示了bs两个字母,我们的变量%a%的值不是为吗?怎么只显示了第2个字母和第3个字母bs,分析一结果我们就可以很容易看出%PATH:10,5%就是显示变量PATH里从11位(偏移量10)开始的5个字符!分析set var=%a:1,2%,set是命令,var是变量值,a要进行字符操作的变量,1从变量a第几位开始显示,2表示显示几位。合起来就是把变量a的值从第2位(偏移量1)开始,把2个字符赋予给变量var%PATH:-10%PATH:0,-2%例8:echo offset a=set var1=%a:-3%set var2=%a:3%set var3=%a:0,-3%set var4=%a:2,-3%echo %var1%,%var2%,%var3%,%var4%pause运行显示:.cn这个就是把变量a倒数3位的值给变量VAR运行显示:.这个就是把变量a的从第3位开始后面全部的值给变量VAR运行显示:bbs.verybat少了.cn,从结果分析,很容易分析出,这是把变量a的值从0位开始,到倒数第三位之间的值全部赋予给var运行显示:s.verybat 那么他就是显示从第3位(偏移量2)开始减去倒数三位字符的值,并赋予给变量var讲得好,例子就是说明问题,为便于记忆:a=%a:-3% “.cn” 偏移量负3,即倒数3位(也可理解为留下右边3位),右取全部%a:3% “.” 偏移量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,m+1,n) 从m+1位开始取n位%a:m,-n%相当于函数mid(a,m+1,len(a)-m-n)%a:m %相当于函数mid(a,m+1,len(a)-m) 或者right(a,len(a)-m)思考:输入任意字符串,求字符串的长度参考:例12-9.SET语句应用:读取字符串长度.bat编辑于2012.7.1513.find和findstr在文件中搜索字符串1、FIND /V /C /N /I /OFFLINE string drive:pathfilename. /V 显示所有未包含指定字符串的行。 /C 仅显示包含字符串的行数。 /N 显示行号。 /I 搜索字符串时忽略大小写。 /OFFLINE 不要跳过具有脱机属性集的文件。 string 指定要搜索的文字串, drive:pathfilename 指定要搜索的文件。如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。Find常和type命令结合使用 Type drive:pathfilename | find string tmpfile #挑选包含string的行 Type drive:pathfilename | find /v string #剔除文件中包含string的行 Type drive:pathfilename | find /c #显示文件行数 以上用法将去除find命令自带的提示语(文件名提示)例: echo off echo 111 test.txt echo 222 test.txt find 111 test.txt del test.txt pause 运行显示如下: 例: echo off echo 111 test.txt echo 222 test.txt type test.txt|find 111 del test.txt pause 运行显示如下: 111 请按任意键继续. . .2、findstr,全英文find string,意为“查找字符串”;/b,(全英文begin,意为“开始”)查找以str开头的匹配模式。/e,(全英文end,意为“末端”)查找以str结尾的匹配模式。/l,(literally,意为“照字面地”)引申为“去正则表达式”,或“普通表达式”,按字使用搜索字符串,及str不使用某些特殊意义的符号,如: $等,只把他们当做普通符号来处理。/r,(regular,意为“有规律的”)引申为“正则表达式”,即默认表达式模式,将搜索字符串作为正则表达式使用,可使用如: $等特殊意义的符号。/s,(subdirectory,意为“子目录”)在当前目录和所有子目录中搜索匹配文件。/i,(ignore,意为“忽略”;引申为“忽略大小写”)指定搜索不分大小写。/x,(ex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论