
3.1 Shell调用WinRAR
WinRAR是一个文件压缩管理共享软件,由Eugene Roshal(所以RAR的全名是Roshal ARchive)开发。首个公开版本RAR 1.3发布于1993年。
WinRAR可以把文件(夹)压缩为.rar或.zip格式,如图3-1所示。
WinRAR可以解压的格式有:.CAB、.ARJ、.LZH、.TAR、.GZ、.ACE、.UUE、.BZ2、.JAR、.ISO、.Z、.7Z、.RAR5。
启动WinRAR软件,单击WinRAR软件的菜单【选项/设置】,弹出“设置”对话框,切换到“集成”选项卡,可以设置WinRAR能够解压的文件格式,如图3-2所示。

图3-1 “压缩文件名和参数”对话框

图3-2 勾选关联的扩展名
3.1.1 获取WinRAR可执行文件路径
WinRAR的执行文件一般情况下位于C:\Program Files\WinRAR\WinRAR.exe,如果个别计算机把这个软件安装到其他位置,使用前面讲过的WshShell对象的RegRead方法读取注册表可以获取其路径。
下面的GetSetupPath函数用来获取指定程序名的安装路径。

运行下面的过程,可以获取WinRAR软件的安装路径以及PowerPoint的安装路径。

上述程序的运行结果如图3-3所示。

图3-3 从注册表中获取应用程序的所在路径
3.1.2 命令和开关
获取到WinRAR.exe的所在路径,就可以使用Shell函数调用这个可执行文件完成压缩和解压缩操作。
调用格式如下。
Shell "WinRAR.exe的路径 命令 开关 压缩包路径 文件路径",vbNormalFocus(或者vbHide)
下面通过一个实例来介绍一下各参数的构造方法。

以上语句的功能是,调用WinRAR.exe把65.png图片文件压缩到Regdll.rar这个压缩包中。可以看出各个参数之间用空格隔开,全部放入双引号内,形成了一个长的字符串。其中的A就是一个命令,表示压缩,上面这个实例没有用到开关参数。
下面分别介绍一下WinRAR的命令参数和开关参数。命令参数的功能是告知WinRAR要执行什么操作,是压缩、解压缩还是删除。开关参数是对命令参数的补充说明。
WinRAR命令参数
单击WinRAR的菜单【帮助/帮助主题】,可以打开其帮助文件,依次展开节点“命令行模式/命令行”,可以看到所有命令参数的说明,如图3-4所示。

图3-4 WinRAR的命令参数帮助
最常用的4个命令参数及其功能如下。
A:压缩,添加到压缩文件中。
D:删除,从压缩包中删除文件。
E:解压缩到当前目录。
X:以完全路径解压。
可以看出,从压缩包中解压出内容,有E和X两个命令参数。其实,E命令参数等价于WinRAR解压参数中的“不要提取路径”;X命令参数等价于“提取完整路径”,使用WinRAR软件解压一个压缩包时,在“高级”选项卡里可以看到解压方式选项,如图3-5所示。

图3-5 命令参数相应的含义
简言之,E就是忽略压缩包中的路径,释放所有文件到目标文件夹,而X则按照压缩包原有的路径结构释放到目标文件夹。
WinRAR开关参数
在WinRAR软件的帮助文件中,依次展开节点“命令行模式/参数”,可以看到所有开关参数的说明,如图3-6所示。
下面是比较常用的开关参数。
-ep:忽略路径。
-ep1:忽略基准路径,但保持现有文件层次结构。
-p或-hp:压缩时加密码。
-df:压缩后删除原文件。
-dr:压缩后删除原文件到回收站。
大致了解命令参数和开关参数后,下面通过具体实例加深学习。

图3-6 WinRAR开关参数帮助
3.1.3 压缩
假设文件夹“东北三省”中的内容如图3-7所示。

图3-7 文件夹内容的示意图
如果采用命令A-ep则是忽略所有路径,也就是忽略文件夹及其子文件夹,把“东北三省”下面管辖的所有文件(含递归)压缩进去。完整代码如下。

代码分析:函数GetSetupPath用来获取WinRAR软件的安装目录,函数AddQuote用来处理Shell命令路径中的空格。要注意Command中要保留必要的空格。
以上代码段中,最重要的一句就是最后Shell函数的应用。
运行上面的“文件夹及其内容添加到压缩包”过程,会在E:盘下生成package1.rar压缩包,手工打开后,如图3-8所示。

图3-8 自动执行压缩
可以看到,A-ep命令把文件夹中所有的“文件”掏出来,放入压缩包,而不管这些文件原先在何处。
现在只需把上述代码中的Command换成"A-ep1",删除原先的压缩包,再运行一次程序,效果如图3-9所示。

图3-9 连文件夹一起压缩
可以看出,该命令保留了原先文件结构。因此,可以简单地理解为-ep参数只压缩文件,-ep1带文件夹压缩。
在实际应用中,根据需要选择开关参数即可。
3.1.4 解压缩
解压缩是将压缩包中的内容释放到磁盘下的操作。解压缩的命令有E和X。
下面的过程把压缩包package1.rar中所有的文件解压到Destination文件夹下。

运行上述程序,把压缩包中的文件直接释放到目标文件夹,如图3-10所示。
如果把Command改为Command = " X ",再次运行上述程序,压缩包中的文件夹和文件一律解压到目标文件夹中,如图3-11所示。
上面的实例把压缩包中所有内容解压到目标文件夹,使用以下代码可以解压压缩包中指定路径的文件,而不是解压全部文件。


图3-10 自动解压

图3-11 连文件夹一起解压
3.1.5 删除
WinRAR使用命令D删除压缩包中的文件或路径。
下面的实例把package1.rar压缩包中的“吉林”文件夹删除。

运行上述程序,删除压缩包中的“吉林”文件夹,如图3-12所示。

图3-12 删除压缩包中指定的文件夹
3.1.6 使用通配符
无论是压缩、解压缩,还是删除命令,路径设置中均可使用通配符。*表示0个以上任意字符,?表示1个任意字符。
下面的程序把文件夹下所有4位扩展名的Word文档添加到Word.rar压缩包中。

运行上述程序,将文件夹中所有的Word文档添加到压缩包,如图3-13所示。

图3-13 批量压缩特定类型的文件
下面的代码从Word.rar压缩包中删除启用宏的Word文档(扩展名为.docm)。

需要注意的是,由于是从压缩包里面删除内容,所以代码中Content的赋值不需要WorkDir。
运行上述程序,删除压缩包中扩展名为docm的文件,如图3-14所示。

图3-14 从压缩包中删除指定扩展名的文件
3.1.7 处理压缩包的密码
使用-p或-hp开关参数,可以压缩为加密的文件,也可以从添加了密码的压缩包中解压文件。-p后面带上密码,表示普通加密,手工双击压缩包,会看到压缩包中的文件列表,每个文件后面有*。
下面的程序把文件夹中所有扩展名为.pdf的文件添加到压缩包,并且设置解压密码为ryueifu。

运行上述程序,然后打开压缩包,会看到处于加密状态,如图3-15所示。

图3-15 自动压缩并设置解压密码
如果使用开关参数-hp,表示高度加密,这种方式生成的压缩包,连其中的文件列表也看不到,如图3-16所示。
对于设置了密码的压缩包,可以在解压命令中把密码传递进去。
下面的程序把刚刚加密生成的Lock.rar解压到test文件夹中。

图3-16 使用-hp参数高度加密

3.1.8 使用WinRAR修改Office文档
Office 2007以上版本的Office文档(.docx、.xlsx、.pptx等格式)其实是一种压缩包格式,使用WinRAR可以直接打开。下面介绍一下用WinRAR查看和修改Excel文件的方法。
实例文件“example01.xlsx”有3个工作表,表名从左到右依次分别为Jan、Feb、Mar,如图3-17所示。

图3-17 Excel工作簿文件
在Excel中关闭该文件,然后打开WinRAR软件,按下快捷键【Ctrl+O】,浏览到example01.xlsx,如图3-18所示。

图3-18 使用WinRAR打开Excel文件
在WinRAR中看到Excel文件由3个文件夹和一个文件构成,继续展开名为xl的文件夹,可以看到和工作表信息有关的内容,如图3-19所示。

图3-19 查看Excel文件的内容
手工把example01.xlsx解压到磁盘下,生成了一些扩展名为.xml的文件。双击Workbook.xml,会在IE浏览器中打开该文件,如图3-20所示。
其中<Sheets>这个节点中存储的就是各个工作表的名称和顺序。
xml文件可以用记事本程序编辑,因此接下来用记事本程序打开Workbook.xml文件,把Jan这个工作表移动到最后,并且把Feb这个表的名称修改为“二月”。修改好后,在IE中再次预览,如图3-21所示。

图3-20 查看Excel文件内部的部署清单

图3-21 调整工作表的XML代码
然后把修改了的Workbook.xml文件压入example01.xlsx工作簿中,在Excel中再次打开,看到工作表的名称和次序发生了变化,如图3-22所示。

图3-22 修改后Excel文件的内容
可以看到Jan工作表移到了最后,Feb工作表被重命名。
Word、PowerPoint文档也是压缩文件,可以用WinRAR查看和打开。以上演示的是手工使用WinRAR查看、修改Office文档,当然也可以用Shell调用WinRAR进行自动解压。
下面的过程把example01.xlsx文件中的Workbook.xml部分解压到Destination文件夹中。

如果是带有自定义功能区的文档,用压缩包打开后,里面有更多的内容,这些在稍后的章节讲解。
以上内容的源代码文件为“实例文档10.xlsm”。