BAT批处理文件语法第1/2页

2019-09-19 07:10:16王振洲

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 
==== 注 =========== 
返回值从大到小的顺序排列不是必须的, 而只是执行命令为 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命令的 "重复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码. 
相关文章 大家在看