书城计算机网络信息技术教育大全-操作系统大全
27113500000005

第5章 DOS(5)

IF:条件判断命令。这是一项很有用的批处理命令。用法1:IF \[NOT\] EXIST文件名命令 \[命令参数\]意义:如果\[不\]存在某个文件将执行某个命令。用法2:IF \[NOT\] ERRORLEVEL错误返回代号命令 \[命令参数\]意义:如果错误返回代号\[不\]大于或等于指定的代号将执行某个命令。其中,ERRORLEVEL表示错误返回代号,很有用。对于很多DOS命令,由于执行的结果不同(如执行成功,执行失败,或被用户中断等),这些命令会返回不同的代号,以表示不同的结果。IF ERRORLEVEL命令就根据这个不同结果而产生的不同代号来执行不同的命令,通常用在某条命令之后。如IF ERRORLEVEL 1 ECHO OK!表示如果当前的错误返回代号大于或等于1时将在屏幕上显示“OK!”的字样。用法3:IF \[NOT\]字符串1==字符串2命令 \[命令参数\]意义:当字符串1和字符串2\[不\]相等的时候执行某个命令。

PAUSE:暂停批文件的执行,并显示“按任意键继续”的字样。

REM:添加注解。用于增加文件可读性,将不被执行。也可以用::来代替。

SHIFT:在批文件中改变可替换参数的位置。可替换参数是一种特殊的参数,只能用在批文件中。这些参数是由使用者在执行批处理命令时输入的。比如,我们执行DIR /S /W命令,其中DIR是命令名,/S和/W是它的执行参数。在批文件中,这些命令参数将被分别赋予到可替换参数中,如/S就成的%1,/W就可了%2,以至类推,而命令本身则被赋予%0中。批文件就是利用可替换参数对执行时输入的参数来进行操作的。比如现在有个批处理文件叫MYFILEBAT,在命令行下执行MYFILEBAT YES,于是%0的值就是MYFILEBAT,%1的值就是“YES”,可以在此批文件中用IF等命令判断出%1等参数的值,然后根据这些值的不同执行不同的操作,如IF"%1"=="YES" GOTO YES。SHIFT命令不带任何参数,执行结果是将%0的值换成原%1的值,而原%1的值变成的原%2的值,以此类推。注意它的不可逆转性。因为批处理文件执行时的运行参数可能很多,可能会超过10个,而可替换参数只能从%0到%9,若想取得%9以后的参数值,只能使用SHIFT命令。这时,整个参数列将向前推。

以上是DOS的自带批处理命令,可以看出,这些命令是非常少的,若要编写较复杂的程序,用以上的命令显然不可能实现。这时就需要其他实用的批处理工具了,著名且实用的有TESTIF,STRING,ASET,BATCHMAN,WBAT等,均可在“DOS软件分类下载”中的“脚本工具”中下载。在批处理文件中使用以上的工具可以实现非常强大的功能,甚至可以完成许多高级语言程序的功能。所以,如果您想编者按写批处理文件的话,它们是您不错的选择,不仅有详细的文档,而且还在不断发展中。

下面就要谈批处理文件的制作了。其实制作批处理文件并不难,只要掌握了方法就行了。随着您操作次数的增多,您会觉得越来越容易的。

首先使用一个文本编辑器,如DOS自带的EDIT命令或其他的编辑工具,如PEDIT等新建一个空白文件(当然,用COPY CON命令直接创建也行),然后在其中根据您想完成的功能输入批处理命令。如果您只是想执行一些的DOS命令的集合,则按顺序在每行输入一个DOS命令就行了。但如果您是想完成一些更复杂的操作,就需要以上的批处理命令或上述的批处理工具了。

以下是一个从1%慢慢增加到100%的批处理小程序,大家可以用作参考,以编写自己的程序。

@echo offbreak offclsset c=0writext10 1 Waitbe delay 4:loopwritext10 9 %c%%%?completedcount cif not %c%==101 goto loopechoset c=kpush/fbreak on

其中,用到了WRITEXT,COUNT,BE和KPUSH,这些都是批处理工具。WRITEXT是ECHO的增强工具,可以自定义显示的效果。COUNT是变量的计算工具,如原来C的值为1,执行COUNT C后C的值就为2。BE是个强大的批处理增强工具,在Norton Utilties80中带有。KPUSH是键盘缓冲工具。

总之,利用批处理命令和批处理增强工具,我们可以编出许多强大的批处理文件来,大家不妨一试。许多批处理工具可以在“脚本工具”中下载。

使用非MS-DOS的操作系统启动

由上文可知,“硬盘逻辑锁”主要对微软的MS-DOS系统发生影响,因此,使用其他的DOS启动就可以了。为此,特意对几种较实用的高版本的DOS,如MS-DOS 710、PC-DOS 710、DR-DOS 705、ROM-DOS 710、FreeDOSbeta9、PTS-DOS Pro 2000的启动盘在硬盘中了“逻辑锁”的情况下进行了启动测试,结果如下:

PC-DOS 710启动盘:启动一切正常;DR-DOS 705(版本号:710)启动盘:启动一切正常;ROM-DOS 710启动盘:启动一切正常;FreeDOSbeta9(版本号:710):启动时显示硬盘有错误,并完全正常启动;PTS-DOS Pro 2000(版本号:690):启动一切正常。

注:以上各种DOS都十分稳定,且均支持FAT32分区和大硬盘,其中ROM-DOS 710还完全本地支持长文件名,且兼容性非常好。

因此,可以用任何一种以上的DOS启动盘启动带有“逻辑锁”的硬盘,启动后已被锁住的硬盘驱动器的盘符(如C:)虽然看不到,但各种磁盘分区软件,如Norton Disk Editor 2002Norton Disk Doctor 2002,以及DOS自带的FDISK程序等,均可以显示出被锁住的硬盘,此时既可用上面提到的DISKEDIT等工具对此硬盘进行查看/手工修复等操作,也可以用一些软件进行自动修复,如NetResq、SRCTools等,以彻底去掉硬盘上的“逻辑锁”,且硬盘上的数据不会受到任何损坏。

虽然MS-DOS启动盘在正常状态下不能在硬盘被锁住的情况下启动电脑,但是由于这仅仅是MS-DOS的启动文件IOSYS中的一个BUG,所以只要修复此BUG,MS-DOS启动盘就不会受到“逻辑锁”的影响而能正常启动了。不过,即使是修复BUG,也应该使用正确的方法。有人提到过通过修改IOSYS中的硬盘分区标记“55AA”的方法来解决问题,其实此法非常不好。因为,这种方法其实是让IOSYS彻底忽略硬盘的存在,即通过跳过硬盘的方法来启动软盘,这样一来,无论硬盘是否被锁住,用此启动软盘启动后硬盘都不能被识别,因此此启动盘就不能作为正常的MS-DOS启动盘了。相反,如果采用正确的方法修复IOSYS中的BUG的话,用此软盘启动后,若硬盘是好的,则能够正常识别,而即使是硬盘被“逻辑锁”锁住了,也可以像上面的方法(即“使用非MS-DOS的操作系统启动”)中提到的用PC-DOS、DR-DOS、ROM-DOS、FreeDOS、PTS-DOS Pro等启动软盘启动后进行进一步的修复等操作。还有人提到过MS-DOS的某些低版本,如32版的启动盘以启动电脑。但这显然有很多缺点,一是旧版本的DOS很难找到,二是由于其版本太低,功能很少,兼容性也很差;三是这些低版本的DOS自身不支持大硬盘(连32M都不支持)、逻辑分区等,甚至会对硬盘造成真正的破坏,而且,MS-DOS 32等版本甚至连144M软盘都不认识。可见,用低版本的MS-DOS启动的方法并不是很可行。因此,使用好的方法修正高版本的MS-DOS的IOSYS中的BUG是很重要的。以MS-DOS 6x的启动盘为例,只需用任何16进制编辑器(如PCTOOLS等)查找IOSYS文件中的16进制字符串“07 72 03”,并将最后的“03”替换为“06”即可。其他一些版本的MS-DOS也可以使用类似的方法,比如MS-DOS 710的IOSYS的具体修改方法请见“中国DOS联盟联合论坛”。这样一来,微软的MS-DOS启动盘也可以像其他各种DOS那样在硬盘被“逻辑锁”锁住的情况下正常启动了。

以上提到的方法都是解决“硬盘逻辑锁”的最直接的方法(即“使用不受‘逻辑锁’影响的DOS启动盘来启动电脑”),也是最好的办法。因此,只要制作一张上面提到的任何一种启动盘(如PC-DOS 710启动盘、ROM-DOS 710启动盘、FreeDOS启动盘,或修复的MS-DOS启动盘等)就可以了。既可平时将此启动盘当作正常启动盘使用,而且当硬盘被锁住时则可用此启动盘启动并解决问题。有人还提到了其他的“方法”,如硬盘热插拔、DM低格等等,不仅麻烦、危险,而且会可能对硬盘中的所有数据造成破坏。比如硬盘热插拔后(需拆机箱且拿下硬盘,并在启动后再重新装上硬盘,非常麻烦且危险),即使是用软盘启动成功了,此时硬盘将彻底不能被识别,包括各种硬盘工具也不能识别。如果用DM跳过BIOS对硬盘进行低格,这样一来,硬盘上的所有数据将全部丢失,不可恢复,损失非常大。由此可见,硬盘热插拔等“方法”都是不实用也不可行的。