设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
1#
发表于 2015-5-21 15:12:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找了todaynew大师的作品:
http://www.office-cn.net/thread-93465-1-1.html
但是遗憾的是,没有关于带密码的解压方式。按网上说的-s开关也好,-p开关也好,都没有解决问题。大家看看能不能帮忙看看?
附件里的压缩包后六位字符串为解压密码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 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

3#
 楼主| 发表于 2015-5-21 16:35:01 | 只看该作者
todaynew 发表于 2015-5-21 15:59
很简单呀
假设你的密码是123,则压缩和解压的自定义函数修改为:
Function RarA(RAR As String, RARname  ...

不对不对之前我也是按网上说的-p来测试,同样无法解压。我希望的结果是在函数里输入密码即可解压,而不需要弹出来。
而现在执行时会弹出输入密码的对话框,但是输入后不仅不解压,还说找不到文件。
麻烦您帮我看看附件的写法有没有问题。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 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


5#
 楼主| 发表于 2015-5-21 17:08:08 | 只看该作者
问题在于解压完之后,文件都不知道放哪里了{:soso_e109:}{:soso_e109:}
解压时提示已经有文件了

但是实际上跟MH370一样,失踪了{:soso_e109:}{:soso_e109:}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
发表于 2015-5-21 17:32:00 | 只看该作者
这是我的小号 发表于 2015-5-21 17:08
问题在于解压完之后,文件都不知道放哪里了
解压时提示已经有文件了

使劲找

点击这里给我发消息

7#
发表于 2015-5-22 05:07:58 来自手机 | 只看该作者
在备份文件夹  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 03:47 , Processed in 0.105745 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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