设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3638|回复: 6
打印 上一主题 下一主题

[多媒体] 【求助】如何使用shell函数调用winrar解压带密码的文件?

[复制链接]
1#
发表于 2015-5-21 15:59:36 | 显示全部楼层
很简单呀
假设你的密码是123,则压缩和解压的自定义函数修改为:
Function RarA(RAR As String, RARname As String, filname As String)
    '功能:压缩文件
    '参数:RAR --RAR地址
    '     RARname---压缩文件名(含路径)
    '     filname---被压缩的文件名或文件夹名(含路径)
    '示例:压缩文件 "C:\Program Files\WinRAR\WinRAR.exe",CurrentProject.Path & "\备份\后台备份.rar",CurrentProject.Path & "\备份\*.mdb"
    Call Shell(RAR & " a -r -ep -df -p123 """ & RARname & """ """ & filname & """", vbNormalFocus)
End Function

Function RarX(RAR As String, RARname As String, fldname As String)
    '功能:解压文件
    '参数:RAR --RAR地址
    '     RARname---压缩文件名(含路径)
    '     fldname---解压的文件夹名(含路径)
    '示例:压缩文件 "C:\Program Files\WinRAR\WinRAR.exe",CurrentProject.Path & "\备份\后台备份.rar",CurrentProject.Path & "\备份\*.mdb"
    Call Shell(RAR & " x -p123 """ & RARname & """ *.* """ & fldname & """", vbNormalFocus)
End Function

2#
发表于 2015-5-21 16:47:58 | 显示全部楼层
本帖最后由 todaynew 于 2015-5-21 16:55 编辑
这是我的小号 发表于 2015-5-21 16:35
不对不对之前我也是按网上说的-p来测试,同样无法解压。我希望的结果是在函数里输入密码即可解压,而不 ...

你光放一个空p当然不行。
你放个空p,意思就是打算放p,于是RAR就跳出对话框问你放个什么p,所以这是正常反应。如果你在p后面写密码,RAR就知道你的p是个什么调调,也就不会弹出对话框再问你什么了。

更通用的搞法可以这样:

Function RarA(ByVal RAR As String, ByVal RARname As String, ByVal filname As String, Optional password As String)
    '功能:压缩文件
    '参数:RAR --RAR地址
    '     RARname---压缩文件名(含路径)
    '     filname---被压缩的文件名或文件夹名(含路径)
    '示例:压缩文件 "C:\Program Files\WinRAR\WinRAR.exe",CurrentProject.Path & "\备份\后台备份.rar",CurrentProject.Path & "\备份\*.mdb","123"
    Dim cmd As String
    If Nz(password, "") = "" Then
        cmd = " a -r -ep -df "
    Else
        cmd = " a -r -ep -df -p{0} "
        cmd = ReplaceValues(cmd, password)
    End If
   
    Call Shell(RAR & cmd & """" & RARname & """ """ & filname & """", vbNormalFocus)
End Function

Function RarX(ByVal RAR As String, ByVal RARname As String, ByVal fldname As String, Optional password As String)
    '功能:解压文件
    '参数:RAR --RAR地址
    '     RARname---压缩文件名(含路径)
    '     fldname---解压的文件夹名(含路径)
    '示例:压缩文件 "C:\Program Files\WinRAR\WinRAR.exe",CurrentProject.Path & "\备份\后台备份.rar",CurrentProject.Path & "\备份\*.mdb","123"
    Dim cmd As String
    If Nz(password, "") = "" Then
        cmd = " x "
    Else
        cmd = " x -p{0} "
        cmd = ReplaceValues(cmd, password)
    End If
    Call Shell(RAR & cmd & """" & RARname & """ *.* """ & fldname & """", vbNormalFocus)
End Function


Public Function ReplaceValues(ByVal str As String, ParamArray pArr() As Variant) As String
    '功能:模仿.Net中的String.Format方法
    Dim str1  As String
    Dim num As String
    Dim i As Integer
    str1 = str
    For i = 0 To UBound(pArr)
        num = "{" & i & "}"
        str1 = Replace(str1, num, pArr(i))
    Next
    ReplaceValues = str1
End Function


3#
发表于 2015-5-21 17:32:00 | 显示全部楼层
这是我的小号 发表于 2015-5-21 17:08
问题在于解压完之后,文件都不知道放哪里了
解压时提示已经有文件了

使劲找
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-8 07:37 , Processed in 0.090264 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表