您在本站的位置:主 页 >> 站长专区 >> 站长作品:《 Windows cab安装包中查找指定的文件
《站长作品》】               Windows cab安装包中查找指定的文件
    由于各种原因,Windows 的系统文件或字体文件丢失,造成系统出现运行故障。这时最快的解决办法就是从 Windows 的安装盘上找出原文件,拷贝回来,使系统恢复正常。以前笔者经常使用以下两种方法:
    一、通过 Windows LAYOUT.INFLAYOUT1.INFLAYOUT2.INF 三个文件进行查找。这三个文件存在于 Windows 安装后的 \Windows\Inf 路径下,包含着 Windows 有关文件的安装信息。我们以查找 winipcfg.exe 文件为例:首先用文本编辑器依次打开上述三个文件,查找字符串“winipcfg.exe”。本例中,我们会在 LAYOUT1.INF 中查到“winipcfg.exe=9,,53248”的一串信息。数字 9 表示 winipcfg.exe 文件包含在 Windows 9 号安装包中,53248 是其字节数大小。于是我们在 Windows 的安装盘上找到 9 号包 NET9.CAB,鼠标双击,Windows 就会用自带的解压工具或 Winzip 打开该压缩包,从中可以找到我们需要的 winipcfg.exe 文件。Windows 的安装包其文件名前缀有 PRECOPYCATALOGBASENETDRIVERWIN98_ 等,后面紧跟着 123……73 等包的顺序号。
    二、使用 Windows EXT.EXE 程序自动查找。这是 Windows 的一个 DOS 应用程序,可以在 Windows98 的启动盘上直接找到,也可以用 Extract.exe \Windows\Command\Ebd\EBD.CAB 文件中解压缩得到。运行 EXT.EXE 程序需要在同一目录下存在 Extract.exe 文件。运行 EXT.EXE 后,程序首先会问 Windows 的安装文件存放在哪个路径下:
    Please enter the path to the Windows CAB files (a:) :
然后要求输入要查找的文件名:
Please enter the name(s) of the file(s) you want to extract:
最后要求输入文件解开后放在哪个目录中
(默认是当前目录)
Please enter the path to extract to ("Enter" for current directory):
    以上问题回答完毕,按 Yes 确认后,EXT.EXE 程序会自动从 Windows 安装目录的安装包中查找指定的文件,找到后会自动解出存放到指定目录下。
    但是,不知什么原因,使用以上两种方法,有时却不能找到指定的文件,虽然文件确实包含在压缩包里。后来,笔者发现 Extract.exe 文件本身具有从 *.cab 压缩包里自动查找指定文件的功能,命令格式是:
   
Extract /a /l <解出文件存放目录> <Windows *.cab文件路径\起始cab文件> <要查找的文件名>
    只要指定了上述命令行参数,Extract 就会从起始文件开始,按包的顺序号,由小到大依次读取包文件,自动查找文件。但它读取 *.cab 文件是“分段”的,不是全部读完。经过笔者的测试,有以下规律(见表格):

起始cab文件

读取的文件

Chl99.cab

Chl99.cab

只读取Chl99.cab文件一个文件

Mini.cab

Mini.cab, Mini1.cab

只读取Mini.cabMini1.cab 两个文件

Precopy1.cab

Precopyx.cab x=1-3

只读取Precopyx.cab 三个文件

Catalog4.cab

Catalog4.cab x=4
Basex.cab x=5-6
Netx.cab x=7-10
Driverx.cab x=11-22
Win98_x.cab x=23-73
读到最后一个包

Base5.cab

Basex.cab x=5-6
Netx.cab x=7-10
Driverx.cab x=11-22
Win98_x.cab x=23-73

读到最后一个包

Net7.cab

Netx.cab x=7-10
Driverx.cab x=11-22
Win98_x.cab x=23-73

读到最后一个包

Driver8.cab

Driverx.cab x=11-22
Win98_x.cab x=23-73

读到最后一个包

Win98_x.cab

Win98_x.cab x=23-73

读到最后一个包

    也就是说,分别从Chl99.cabMini.cabPrecopy1.cabCatalog4.cab 开始,就可以将所有的压缩包浏览完。于是,很自然的想到了批处理,于是编写了一个批处理文件 Findcabs.bat,完满地解决了问题(批处理文件见后)。批处理文件的命令格式为:
    Findcabs <*.cab 所在路径> <要查找的文件名>
    运行时当前目录下要有 Extract.exe文件。运行后会将找到的文件存放到当前目录,并给出提示信息。这样以来,就不会有哪个要查找的文件漏网了。如果读者朋友有更好的方法,请 Email:zhangking@263.net 联系。
  @echo off
  if "%1"= ="" goto Prompt
  if "%2"= ="" goto Prompt
  extract /a /y /l . %1\chl99.cab %2>nul
  extract /a /y /l . %1\mini.cab %2>nul
  extract /a /y /l . %1\precopy1.cab %2>nul
  extract /a /y /l . %1\catalog4.cab %2>nul
  if exist %2 goto Ok
  echo.
  echo Can't find this file.
  echo.
  goto End
  :Ok
  echo.
  echo OK!
  echo.
  goto End
  :Prompt
  echo.
  echo Usage: findcabs {directory with *.cab} {filename to find}
  echo.
  :End

    以上三种方法笔者在
Windows98 第一版中验证。由于 Windows 系列版本其打包方法基本相同,所以读者完全可以在 Windows 的其它版本中借鉴使用。

               
            张庆 Email: zhangking@263.net    2001.1.3

返回“站长专区”
Copyright(C) By ZhangQing 张庆 返回主页
站长邮箱:zhangking@263.net  Bp:029-95808 呼 822686