zoukankan      html  css  js  c++  java
  • Dos批处理文件Bat的编写

    最近由于工作的原因,总是需要些一些命令行下的批处理文件,这些扩展名为".bat"的文件,是从Dos时代一路传承下来的,所以我们总是喜欢叫他bat 文件。从上大学的时候,一直用bat做一些小的东西,从来没有感受到过它的威力,最近用它做一些工作,发现这个东西还真的比较有意思。总结一下,希望对大 家的工作能有所帮助。Bat有传统的模式,和Command Extensions两种模式,扩展用法通常是指后者。 最常用的命令:Call,Echo,For,Goto,If,Pause,REM,shift Call 命令:调用另外的一个批处理文件。常用的方式就是:"Call sample.bat",新扩展的一个用法是 "Call :labelarguments",也就是说,你可以用Call来调用Bat文件内部的一段脚本,用exit来退出当前的call调用。如果配合Goto 语句的话,实际上是扩展的Bat文件支持了一个Ugly的函数。 这里需要注意的是,Batch脚本的参数(%0 %1 ...)有了一些新的变化: %* 表示这个批处理文件的所有的参数(%1 %2 ....) 对于每一个%n还有一些扩展: %~1    删除%1的两端的双引号 %~f1   扩展成%1的全部文件名 %~d1  获取%1的盘符 %~p1  获取%1的文件路径 %~n1  获取%1的文件名称 %~x1  获取%1的扩展名 %~s1  获取短文件名 %~a1  获取文件的属性 %~t1  获取文件的时间 %~z1  获取文件的大小 %~$PATH:1  从指定的PATH环境变量中查找%1并且扩展成全文件名 而且上面的还可以组合,例如: %~dp1    把%1扩展成盘符和路径 %~nx1    把%1扩展成文件名和扩展名 %~dp$PATH:1    从制定的PATH中搜索%1,并且扩展成盘符和路径的形式 %~ftza1    扩展成dir类似的输出结果,文件名    时间    大小    属性 echo 用来显示一段文字,没有什么好说的。 goto 用来进行跳转: goto END :END 也没有什么好说的。 for 命令: 这个里面最复杂的一个命令。 基本形式: for %variable in (set) DO command [command-parameters] 需要注意的是,这里的variable一定是单个字符的。set可以是一个或者多个文件,也可以使用通配符: for %f in (*.txt *.log) DO type %f 表示查找当前目录下所有的.txt,.log,在屏幕上打印它的内容。 这里需要注意的是,Do后面可以加()来执行多行的语句; for %%f in ( *.txt ) DO ( echo process %%f... type %%f ) 对于扩展的For语句,有如下的几种形式: for /D %variable IN (set) DO command [command-parameters] 对目录进行操作 for /R [[driver:]path] %varable IN (set) do command [command-parameters] 对一个路径下的所有的目录作指定的操作 for /L %variable IN (start,step,end) DO command [command-parameters] 产生一个列表,例如(1,1,5) 则产生一个(1 2 3 4 5)的列表 for /F ["options"] %variable IN (file-set|"string"|'command') DO command [command-parameters] 这 个命令分三种情况,第一个是一个文件的集合,这种情况下,所有的这些文件都会被打开,命令将处理文件的内容。如果IN的括号里面是有双引号的,则是处理这 个字符串。如果括号里面的是单引号的话,则是处理执行命令以后的结果。如果指定了usebackq的话,则单引号表示的是字符串,反向的单引号表示执行的 命令,这个时候双引号可以用来把包含空格的路径括起来。 一个一个的解释,首先是options,options有如下的选项: eol=c     只能指定一个字符,以此开始的为注释行。 skip=n    跳过文件的n行 delims=xxx    指出分隔符的结合。缺省的是空格和TAB tokens=x,y,m-n,*    指定获取的Token. usebackq    使用反单引号(~键一起的那个) 例如: for /F "eol=; token=2,3* delims=, " %i IN ( myfile.txt ) do @echo %i %j %k 解析myfile.txt,忽略分号开始的行,%i是第二个,%j是第三个,%k是剩下的所有。 这里需要注意的是,上面%~进行扩展的那些东西,对于FOR循环中的文件变量也是有效的。 for %Z in (*.txt) do ( echo %~fZ ) 上面的命令就是用来显示全路径名的。 IF命令: IF命令以供有三种形式: IF [NOT] ERRORLEVEL number command IF [NOT] string1 == string2 command IF [NOT] exists file command 非常简单,没有什么好说的,扩展的命令如下: IF [/I] string1 compare-op string2 command IF CMDEXTVERSION number command IF DEFINED variable command 比较操作符如下: EQU,NEQ,LESS,LEQ,GTR,GEQ,不多说了,很简单。 /I标志增加的时候,忽略大小写。 CMDEXTVERSION有点像ERRORLEVEL,不同的是他和Commend Extensions的内部数字作比较。 DEFINED用来判断一个环境变量是不是被定义。 可以用%ERRORLEVEL%,%CMDEXTVERSION%,%CMDCMDLINE%作变量用,前面两个很好理解,最后一个就是输入的命令行。 注意IF ERRORLEVEL命令,这个判断的是上一个命令的结果,所以一定按照ERRORLEVEL从大到小的顺序进行判断。 Pause命令: 让程序停下来等按键,没有什么好说的。 REM命令,注释,仅此而已 shift命令: shift /2 修改参数的位置,从第二个参数开始,把后面的一个参数超前挪动一位。%3=>%2,%4=>%3,%0,%1不变。 Choice命令: 提示用户作出选择的命令;支持如下的参数 /C    XNC    给出X,N,C三个选择 /N    隐藏提示信息 /CS    支持大小写 /T    10     10秒超时 /D    缺省选择 /M    text    提示信息 字符串操作: 操作方法一,用FOR命令来进行操作。 操作方法二,%variable:~start,length%从变量中截取字符串。%variable:replace=candicate%来替换字符串。 set操作: 设置变量,可选的参数是: /A    用来进行数学运算,支持与C语言一样的操作符 /P    根据用户的输入来设置环境变量 表达式运算: 调用expr来运算。 还可以set /a进行 其他的注意事项: 在写Bat文件的时候,一定要注意在开始和结束的时候setlocal enabledelayedexpansion/endlocal这样你改变的环境不会影响到外面。 最容易出错的地方: 错误的方法: for ...... do ( set /a index+=1 use .... %index% ... ) 这里所有的%index%都是初始值,而不是你想要的。 下面的才是正确的: for ...... do ( set /a index+=1 use ... !index!... )
  • 相关阅读:
    spring学习总结003 --- IOC容器启动源码(BeanFactoryPostProcessor)
    spring学习总结002 --- IOC容器启动源码(BeanFactory)
    ubuntu上安装mysql
    kafka学习总结017 --- consumer配置参数之max.poll.interval.ms
    kafka学习总结016 --- consumer配置参数session.timeout.ms和heartbeat.interval.ms
    kafka学习总结015 --- consumer配置参数之auto.offset.reset
    kafka学习总结014 --- consumer多线程问题
    kafka学习总结013 --- kafka消费者API
    kafka学习总结012 --- 数据消费相关流程
    Java SAX解析
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327259.html
Copyright © 2011-2022 走看看