当前位置:K88软件开发文章中心网站服务器框架Dos → 文章内容

手把手教你写批处理

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 14:14:34

运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。 例2:C:根目录下有一批处理文件名为f.bat,内容为:@echo offformat %1如果执行C:\>f a:那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:例3:C:根目录下一批处理文件名为t.bat,内容为:@echo offtype %1 type %2 那么运行C:\>t a.txt b.txt %1 : 表示a.txt%2 : 表示b.txt于是上面的命令将顺序地显示a.txt和b.txt文件的内容。==== willsort 编注 =====================================================    参数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下:初始状态, cmd 为命令名, 可以用 %0 引用cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 ^    ^    ^    ^    ^    ^    ^    ^    ^    ^     |    |    |    |    |    |    |    |    |    | %0   %1   %2   %3   %4   %5   %6   %7   %8   %9经过1次shift后, cmd 将无法被引用 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10      ^    ^    ^    ^    ^    ^    ^    ^    ^    ^         |    |    |    |    |    |    |    |    |    |     %0   %1   %2   %3   %4   %5   %6   %7   %8   %9经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10          ^    ^    ^    ^    ^    ^    ^    ^    ^          |    |    |    |    |    |    |    |    |         %0   %1   %2   %3   %4   %5   %6   %7   %8    遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针.========================================================================特殊命令if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。 一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 1、if [not] "参数" == "字符串" 待执行的命令 参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。例:if "%1"=="a" format a:==== willsort 编注 =====================================================    if 的命令行帮助中关于此点的描述为:      IF [NOT] string1==string2 command    在此有以下几点需要注意:      1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种"防空"字符      2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量      3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行========================================================================2、if [not] exist [路径\]文件名 待执行的命令 如果有指定的文件,则条件成立,运行命令,否则运行下一句。如: if exist c:\config.sys type c:\config.sys 表示如果存在c:\config.sys文件,则显示它的内容。****** willsort 编注 ********    也可以使用以下的用法:      if exist <device> command    device 是指DOS系统中已加载的设备, 在win98下通常有:       AUX, PRN, CON, NUL      COM1, COM2, COM3, COM4      LPT1, LPT2, LPT3, LPT4      XMSXXXX0, EMMXXXX0      A: B: C: ...,       CLOCK$, CONFIG$, DblBuff$, IFS$HLP$    具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:      1. 该设备确实存在(由软件虚拟的设备除外)      2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)      3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)    可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备    另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄. ========================================================================3、if errorlevel <数字> 待执行的命令 很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2==== willsort 编注 =====================================================    返回值从大到小的顺序排列不是必须的, 而只是执行命令为 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 %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e     更高效简洁的用法, 可以参考我写的另一篇关于获取 errorlevel 的文章    出现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而由于 set命令的 "重复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码.    另外, 虽然 if errorlevel=<数字> command 也是有效的命令行, 但也只是 command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了========================================================================二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,g

上一页  [1] [2] [3] [4] [5] [6]  下一页


手把手教你写批处理