VB 使用ShellExecute 调用RAR进行解压

作者&投稿:尾冯 (若有异议请与网页底部的电邮联系)
补充:【如果你想不管rar的路径就解压也很简单,把C:\Program Files\WinRAR\下面的Rar复制到你的exe程序同一个目录,然后就可以直接执行下面的所有命令了,也不用写绝对路径了 如shell"rar e XX" 】

就按照你的 1.rar 举个例子:

解压C盘下面的1.rar压缩文件,到C盘根目录
直接Shell "rar e C:\1.rar"

如果要解压当前目录下的1.rar(必须是和VB的exe程序在同一目录下)
Shell "rar e 1.rar"

当当前目录下面有同名的文件要覆盖原有文件解压,添加o+开关就是
Shell "rar e o+ 1.rar"

在Text控件中获取路径解压
Shell "rar e -o+ " & Text1.Text

还有如果你没有把winrar安装目录下的Rar.exe复制到windows的system32目录下就用rar文件的绝对路径,如下命令
Shell "C:\Program Files\WinRAR\Rar e C:\1.rar"

下面是rar控制台使用的所有命令 :

用法: rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...>
<@列表文件...> <解压路径\>

<命令>
a 添加文件到压缩文件
c 添加压缩文件注释
cf 添加文件注释
ch 改变压缩文件参数
cw 写入压缩文件注释到文件
d 删除压缩文件中的文件
e 解压压缩文件到当前目录
f 刷新压缩文件中的文件
i[参数]=<串> 在压缩文件中查找字符串
k 锁定压缩文件
l[t,b] 列出压缩文件[技术信息,简洁]
m[f] 移动到压缩文件[仅对文件]
p 打印文件到标准输出设备
r 修复压缩文件
rc 重建丢失的卷
rn 重命名压缩文件
rr[N] 添加数据恢复记录
rv[N] 创建恢复卷
s[名字|-] 转换压缩文件为自解压格式或转换回压缩文件
t 测试压缩文件
u 更新压缩文件中的文件
v[t,b] 详细列出压缩文件[技术信息,简洁]
x 用绝对路径解压文件

<开关>
- 停止扫描
ac 压缩或解压后清除存档属性
ad 添加压缩文件名到目标路径
ag[格式] 使用当前日期生成压缩文件名
ao 添加具有压缩属性的文件
ap<格式> 添加路径到压缩文件中
as 同步压缩文件内容
av 添加用户身份校验(仅注册版本可用)
av- 禁用用户身份校验
c- 禁用注释显示
cfg- 禁用读取配置
cl 名称转换为小写
cu 名称转换为大写
df 压缩后删除文件
dh 打开共享文件
dr 删除文件到回收站
ds 对固实压缩文件禁用名称排序
dw 压缩后清除文件
e[+]<属性> 设置文件排除和包括属性
ed 不添加空目录
en 不添加"压缩文件结束"标志
ep 从名称中排除路径
ep1 从名称中排除基本目录
ep2 展开为完整路径
ep3 扩展路径为包含盘符的完全路径
f 刷新文件
hp[密码] 同时加密文件数据和文件头
id[c,d,p,q] 禁用消息
ieml[属性] 用 E-mail 发送压缩文件
ierr 发送所有消息到标准错误设备
ilog[名称] 把错误写到日志文件(只有注册版本可用)
inul 禁用所有消息
ioff 完成一个操作后关闭 PC 电源
isnd 启用声音
k 锁定压缩文件
kb 保留损坏的已解压文件
m<0..5> 设置压缩级别(0-存储...3-默认...5-最大)
mc<参数> 设置高级压缩参数
md<大小> 以KB为单位的字典大小(64,128,256,512,1024,2048,4096 or A-G)
ms[ext;ext] 指定存储的文件类型
mt<线程> 设置线程数
n<文件> 仅包含指定的文件
n@ 从标准输入设备读取文件名到包括
n@<列表> 在指定的文件列表包括文件
o[+|-] 设置覆盖模式
oc 设置 NTFS 压缩属性
or 自动重命名文件
os 保存 NTFS 流
ow 保存或恢复文件所有者和组
p[密码] 设置密码
p- 不询问密码
r 递归子目录
r0 仅递归通配符名称的子目录
ri<P>[:<S>] 设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间
rr[N] 添加数据恢复记录
rv[N] 创建恢复卷
s[<N>,v[-],e] 创建固实压缩文件
s- 禁用固实压缩文件
sc<chr>[obj] 指定字符集
sfx[名称] 创建自解压压缩文件
st[名称] 从标准输入设备读取数据(stdin)
sl<大小> 处理小于指定大小的文件
sm<大小> 处理超过指定大小的文件
t 压缩后测试文件
ta<日期> 添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
tb<日期> 添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
tk 保留原始压缩文件时间
tl 设置压缩文件时间为最新文件时间
tn<时间> 添加 <时间> 以后的文件
to<时间> 添加 <时间> 以前的文件
ts<m,c,a>[N] 保存或恢复文件时间(修改,创建,访问)
u 更新文件
v 自动检测创建卷的大小或者列出所有的卷
v<大小>[k,b] 创建卷大小=<大小>*1000 [*1024, *1]
vd 创建容量前清除磁盘内容
ver[n] 文件版本控制
vn 使用旧风格的卷命名方案
vp 每卷之前暂停
w<路径> 指定工作目录
x<文件> 排除指定的文件
x@ 从标准输入设备读取要排除的文件名
x@<列表> 排除指定列表文件中的文件
y 假设对全部询问都回答是
z[文件] 从文件读取压缩文件注释

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
--------------------
a = ShellExecute(Me.hwnd, "Open", "C:\Program Files\WinRAR\rar.exe ", "x y:\123.rar", "y:\az\", 0)
'解压y:\123.rar 到y:\az\ 目录下,不显示rar窗口。

运行成功
Shell "C:\Program Files\WinRAR\Rar.exe x D:\b\a.rar D:\b"
解压D:\b\a.rar 到D:\b目录下,不显示rar窗口

用ShellExecute调试不成功,不知道为什么?

授之予鱼,不如授之予渔,你既然要向rar传递命令参数,就应该查看rar的帮助文件,里面有详细的命令说明。
在:开始-所有程序-winrar,里面。希望对你有帮助。

如果是无视RAR所在安装路径的盘符,我能办到。
如果是无视整个RAR所在安装路径,我得问:
一定要用这个函数ShellExecute吗?不用这个函数我能做到。

vb调用rar压缩文件问题~

首先,你要装Winrar
要把整个用法都写出来也是挺长的(参阅C:\Program Files\Winrar\Rar.txt 47,855 字节来讲RAR的命令行)
简单说

Const WinRAR = "C:\Program Files\Winrar\" 'winrar安装地址,要带\
Const Path1 = "c:\1.txt" '要压缩的文件,路径带空格的话在外面多套两对双引号
Const Path2 = "c:\2.txt" '要压缩的文件,同上
Const RarPath = "c:\3.rar" '生成的压缩文件名,同上
Private Sub Command1_Click()
Shell WinRAR & "rar.exe a " & RarPath & " " & Path1 & " " & Path2
End Sub

Option Explicit
Dim mystr As String
Dim Source As String
Dim Target As String
Dim retval
Private Sub Command1_Click() '压缩
mystr = "C:\Program Files\WinRAR\winrar.exe"
Source = "d:\1234"
Target = "d:\555.rar"
mystr = mystr & " a " & Target & " " & Source
'Source = App.Path & "\111.jpg"
'Target = App.Path & "\111.rar"
retval = Shell(mystr, vbHide)
End Sub

Private Sub Command2_Click() '解压缩
mystr = "C:\Program Files\WinRAR\winrar.exe"
Source = "D:\aa\123.rar"
Target = "E:\aa"
mystr = mystr & "X" & Source & " " & Target
Text1.Text = mystr
retval = Shell(mystr, vbHide)
End Sub