批处理脚本学习笔记——程序员版.pdf

所需积分/C币:38 2014-04-17 21:14:55 1.31MB PDF

批处理脚本学习笔记——程序员版.pdf http://blog.csdn.net/taotaoyouarebaby/article/details/23958897的PDF版。
11延迟绑定技术 语法 setlocal EnableDelayedExpansion I DisableDelayedExpansion set var=!var!i endlocal 功能: 1)使用变量在逻辑行执行过程中的实际值(动态变化),而不是读取逻辑行时的值(不变,只是简单替换)。主要 用于for语句。如果不启动的话,for语句中使用set命令时,多数情况下无法得到想要的结果。 2)需要延迟绑定的变量,通过!var!的形式来获取值。支持同样的字符串操作。 12命令扩展 语法 set1oca1Enab⊥eE× tensions| Diableextensions endlocal 功能:打开一些命令的扩展功能。 2批处理基本语法 注释 rem arythin : anything.解释器无法识别::所以会抛夼这一行,达到注释的效果。由此可以得到其它的注释方式。 21变量 2.1.1简单变量 定义: set variable-name=value value) valuc :=|l string I numbers 说明 1)变量名与变量值之间不能有空格 2)变量值不能有特殊字符,如果有则需要转义 3)变量可以重复定义。重定义时会覆盖之前定义的值。 4)从用户输入或文件取得变量值 set/pvar-提示语句 set /p var=< file.txt 删除 set variable-name 显示:会显示所有以 variable-name为前缀的变量的值 set variable-name 引用: 号变量名号 使用示例: decho off 输出: value set var-value echo uvar o pause 22输入输出 2.2.1输出 控制输出 描述 示例 cch 输出一行信息 echo袅var号输出变量值 echo e1 输出命令行参数值 echo some- message.输出任意信息 echo>fie. xt str等同于: echo str>>fi1e.txt 打印文本信息到标准输出 type a.txt显示a.txt中的内容 more 逐屏显示 type a. txt I more +3 CLS 清屏 路过前3行,逐屏显示a.内容 COLOR 设置cmd文字与背景颜色 color C7背景(0:黑色)文字(7:自色 T工T工E 设置cma标题,常当作进度条用 @title welcome to goD进度条程序 隐藏命令 echo不显示命令 七me/t显示当前时间 2.2.2标准输出输出句柄 句柄 等价的数字 描述 STDIN 0 标准输入,即键盘输入 STDOUT 标准输出 STDERR 2 标准错误输出 UNDEFINED 3-9 应用程序定义 2.2.3输入输出重定向与管道命令 命令 描述 将标准输出重定向到文件,即将输出写入文件。以覆盖方式写入 将标淮输出重定向到文件,即将输出写入文件。以在尾部追加的方式写入。 将标准输入重定向到文件,即从文件中读取输入数据。 a|b,将a命令的输出作为b命令的输入。名叫管道 < 管道合并命令εa<&b等价于b>&a。将要输出到的内容,输出到a。将b管的出口合并到a管 >∝ 的入口 常用形式; type a.txt>b.txt2>1,将type的错误信息输出到标准输岀。并将标准输 出重定向到文件。 常见: 1) command>nu1等价」 command1>nu1:不显示 command命令的输出信息。 eg: copy a.txb,xt>nu1.这样来就不会显示复制完成的提示信息了 2) command2>nu1:不显示 command命令的标准错误信息 23字符串 2.3.1常用字符串操作 操作 描述 定义/创建 set str=a;b;c;d 连接 set str= trotherthings 替换| set str=stx:a=e号把stx中的所有a替换为e set str=str:*;=8把str中从开始到′;′为止(包含′;′)的所有内容替换为空(即删除) 剪切8str: start,erd]号 1)字符串下标从0开始。得到的字符串,如果 start==0,为(str[ start],str[end 1); start!=0, A(strIstartl, strlendj 2) start,ead的取值区间:(-1en,-1]8[0,1en-1),负数表小从后往前数的位置。 str=a: b str: 19 i bi c: d 8str:~0,28EQU8str:~1,28 ostr 1 清空 set str- 2.3.2处理字符串中的保留字符 windows nt的保留字符:&|()<>^。当字符串有以上字符只需要使用字符对其进行转义 一般情况 set var=dir4>ile.txt&rem转义单个保留字符 set var="dir>file.txt"8rem会转义双引号中的所有保留字符,但var中会含有双引号 嵌套时: @IF NOT 1== FOR /F tokens=2X 9CA IN 'REG Query HKLM\SOFTWARE \ PHP /v InstallDir I )DO( QFCR/F%各CIN 号号~sB.\PHP.三XE-r" print^(md5^(、"号~1、"^)^) do @SET MD5=C ie H: each level of nesting would require an extra level" of escaping 2.3.3示例 显示一个变量中所有以分号分隔的字符串。 @echo off set myvar-a bioid set strippedvar-imyvari repeat for /f" delims=; oa in ("strippedvar")do echo B%a set prestrippedvar=ostrippedvar o set strippedvar=ostrippedvar: *i=5 if not oprestrippedvar:i=%"==prestrippedvaro" goto repeat 24算术运算SET/A 支持的数 Octal SET /A Result =020 Decimal SET /A Result=16 Hexadecimal SET /A Result=0x0 Or any combination SET /A Result=010 0x20 -24 算术运算汇总:对所有操作符支持复合赋值(eg:+-,--) Add: SET /A Result 12 4 Subtract. SET /A Result=23 Multiply: SET/A Result=8* 2 Integer divide SET /A Result= 33/2 Modulo divide:(1,2) SET /A "Result =66 0925 Shift right: (2) SET /A Result =128>> 3 Shift left SET /A Result =1<< 4 Bitwise and SET /A "Result =48& 23" Bitwise or: SET /A Result =16 16 Bitwise xor: SET /A Result =31 15 Group: SET /A Result =(24<<1 说明 1.取模运算,在批处理中使用,在命令行中使用 2.当表达式包含特殊字符(%,&,<,,,,(o)时,需要使用双引号引起来。 3.不支持实数(小数)运算 25 DOSKEY与命令别名 语法: doskey macroname=[ comand{ STcommand}]设置命令别名,等号右边不能以空格开头。 d。skey/ MACROFTLE= filename从文件中导入命令别名设置 doskey/ MACROS:A> filename将所有命令别名设置导出到文件 Doskey宏定义的一些特殊代码 特殊代码 含义 示例 命令分隔符。允许一个宏中存在多个命令。 dos key ls=dirsTecho end 91-s9接收对应的批处理参数。与批处理程序中 的:1-9等同 接收别名后面的所有参数 doskey Is=dir $t 例 xem在cmd启动时设置令别名 cmd /k doskey /macrofile-macros linux doskey myname for /f "delims-\ tokens-2" %i in ( whoami') do @echo %i doskey destroy=del /s/q/=s 26环境变量 说明:下血两种方式,在当前cma实例中对环境变量作的改变,在该实例中(及其创建的子实例中, start cmd.exe) 是无法获得的。只有在下一次cmd启动时生效;重启 explorer,批处理中才能生效。 2.6.1使用wmic操作环境变量 wmic是一个 windows系统管理工具,功能非常强大。系统支持>=xp,>= server2003 操作 实现: wmic environment+上下面的 is create name="VarName", username=<system>", Variablevalue="Varvalue" JH where "name='Name, and username='<system>I"delete Ti where "name='Name and username='<system>'" get Name, Variablevalue k where "name='Name' and username=k<system>l" set Variablevalue=Value 说明 1)可永久性的设置系统环境变量,不会因为退出cmd而失效。设置后在下一次cmd启动时生效;重启 explorer 批处理中才能生效。 2)set功能,如果 Variablevalue跟的是空值,则会删除该变量 3)使用 username="< system>",是用于设置系统环境变量的。如果去掉则是设置当前用户的坏境变量 4)不能重复 create:不能set/ delete/get未创建变量。 Wmic的使用参见http://www.cnblogs.com/tcp5/archive/2013/06/19/3143832.html 用于设置环境变量时,为方便使用需要进行一下改造:参见永久设冒系统环境变量— y WMIC 2.6.2使用sex操作环境变量 setx说明:系统支持>= xp server package2。设置环境变量,永久有效。不需要重启系统。 使用方法类似一般的sct命令 setx [/M] var-name=[var-va lue 说明 1)/M用于设置系统环境变量。 2)只能清空,没法删除已经存在环境变量。 3程序流 31条件执行 3.1.1组合命令丘,&, 命令符号 功能描述 a&b,先执行a,然后执行b a&&b,先执行a,如果a执行成功(返回值为0)才会执行b a|b,先执行a,如果a执行失败(返回值非0)才会执行b. 用于将多行组合成逻辑上的一行命令。eg: &( a,b命令虽然自在不同的行,但解释器会将其当作一行处理。变量替换时会同时替换a,b中存在 的变量。 3.1.2IF基本命令 基木语法:工F[No] condition command1[ ELSE command2]:如果(不)满足条件则执行 command1, 否则执行 command2。中括号括起来的表示可选项。 IF命令 功能 1. IF [NOT ERRORLEVEL number command ElSE commando 检查上一个命令的返回值 2.IF [NOT] errorlevel% op numbcr command ELSE command 1.>=n.2. op n 工F[/I]No! strin1 op string2 command else command比较字符串/数字。/工不这别大小写 IF [NoT EXIST filer.ame command elSe command 判断文件(夹是否存在 IF NOT DEFINED variable command ElSE command 判断变量是否定义/不为空 说明: 1.EISE逻辑上必须与F在同一行上 2.op可以上:3gU(==),N3Q(!=),ISs(<),LEQ(<=),CTR(>),GEQ(>=) 3.1.3工F条件的布尔逻辑实现 布尔逻辑关系:a6b==!(!a|!b),a^o=(!asb a !b) TF..EISE实现 临时变量实现 布尔算术实现 AnD: 21>1 and 2<10 do commad1 工F号1GTR1 SET flag-1 IF 91 GTR 1 SET COnd1-1 ELSE IF 2 LSS 10( IF NOT 1 GTR 1 SET flag =0 set condl=C commandl IF NOT 82 LSS 10 SET flag =0IF 82 LSS 10 SET cond2= if flag Equ 1 command1 ELSE set cond2=0 SET /A r=cond1 cond2" 也可写为一行 IF r EQU 1 command1 工F81GyR1工F暑2Lss10 command OR: %1>1oR 1< 10 do command1 工E.1GTR1( sETf⊥ag=C IE 1 GTR 1 SET COnd1=l ELSE command1 IF 1 GTR 1 SEt flag =1 set cond1=c ELSE iF o1 lss 10 SeT flag =1 IF 21 LSS 10 SET COnd2=1 iF 1 ISS 10 If oflag EQU 1 comand ElSE set cond2=0 command1 SET /A r="cond1 cond2" IF r eQu I commandl xOR: 91>1 xOR 92>1 do commandl 只用IF..ELSE..逻辑很难实 SET flag 0 iF 91 GTR 1 SET Co1d1-1 ELSE 现 IF NOT 1 GiR 1 IF 2 GTR 1 set cond1=C SEt flag =1 IF 2 GTR 1 SET COnd2=l ElSe 工F号1GTR1 IF NOT E9U1 SET set cond2-0 flag SEt /A r=cond1 A cond2" IF号f1ag号EgU1 echo TrUe IF r Equ 1 command1 3.1.4循环实现 goto, label,if 1abe1:以冒号开始. start eof got。语法: Goro label 说明:程序流会从当前位置跳转到⊥abe⊥所在位置。 示例:卸载程序的菜单 ren删除部分文件的菜单 SELECT echo选择需要删除的文件 echo[1]. PGSQL, PostgreSQL数据库程序 echo[2]. PGSQLDat.a,数据库数据 echc[3].JRE,java运行时环境 ech[4]. TOMCAT,服务器程序 echo[5]. WEBAPE,网站主程序 cho[6].退出 s卫 LECT AGAIN set/ P option="输入要删除的项目[1|2|3|4|5|6]:" iE"号p七ion"=="1" goto PGSQL if"号 option" 2" gotO PGSCLDATA if option==3 goto JRE ⊥f" option3"=="4" goto T○MCAT f option g==5 got NEBAPP 6 goto end goto SELECT AGAIN 32for循环 在命令行下for变量使用,在批处理中for变量使用各号。 3.2.1fox变量及命令行参数扩展功能 语法 号~[ options]var-name options :=optior option) tion :=8f dpInx t Z SPATH var-name [a-zA-20-9] 选项说明:for变量名为单个字母,区分大小写。命令行参数名0~号9也可以使用这项功能。各选项可以组合使 用 功能组合 说明 示例 8~1 删除任何引号(") 8~1:"c:"->C: 8~f0 完整路径名:驱动器号+路径+文件名+扩展名号~f0:D:\ BatchtestDir\ forexpvar bat 相当于下面四个的组合 是~d0 驱动器号 8~d0:D 路径 p: \ BatchTestDir ~n0 文件名 cuno: forexpvar 8~x0 个文件扩展名 c x0:. bat ~s0 路径,只含有短名 so: D:BATCHT 1\\\ FOREXP 1 BAT 8~a0 文件属性 8~a0 是~t0 文件的日期/时间 号~t0:2014/04/1411:19 zO 文件的大小 0:306 8~$PATH以I变量为关键字查找path变量,找到则返回~sPAH:1C: 第一个匹配,否则返回空 8~dp0驱动器号+路径 dpo: D: \BatchTestDir ■示例代码:测试所有的变量增强功能 rem本测试文件完整路径名:D:\ BatchTestDir\ forcxpvar.bat decho off Cal⊥:show"C:" coto : end ccho88~1:1-^>8~1 echo为~f0:8~f0 echo是8~d0:~d0 echo 88"p0: 8 p0 echo no: wnO ccho号8~x0:~x0 echo -s0: sO echo aoao: oao echo co-to: oto echo c z0:o zO echo $PATH: 1 $PATH: 1 echo组合 echo &ovdpo o wdp echo88~f七Za08~ftZa0 end pause 3.22FOR/F分析文本 语法 OR/F ["options"] variable IN filenames /*用for解析文件内容。文件名不能含有通配符。eg:in(dix.txt,dir2.txt)*

...展开详情
img

关注 私信 TA的资源

上传资源赚积分,得勋章
    最新推荐