2

我对 VBScript 相当陌生。我对我想要完成的事情进行了一些广泛的研究,甚至找到了如何做的例子,但无法让它正常工作。

在我的完美世界中,我需要解压缩从第三方供应商发送到文件夹的所有压缩文件,将解压缩文件导入另一个文件夹,然后删除压缩文件。

下面的脚本适用于不受密码保护的 zip 文件,但从供应商发送的所有文件都有密码。正如在另一篇文章中看到的那样,我注释掉的以下几行应该插入密码,但不要。“ ...(pwd+myZipfile)”和“ ...(pwd+extractTo)”。

提前感谢您的帮助。请提出任何代码改进或其他方法来实现这一点。

pathToZipFile = "P:\ZipFiles"  
extractTo = "P:\UnZip"    
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(pathToZipFile)
Set fc = f.Files
Dim myZipFile 
Dim intOptions, objShell, objSource, objTarget
Dim pwd
pwd = "password" 

For Each f1 in fc
On Error Resume Next

    myZipFile = f1

    '    Create the required Shell objects
    Set objShell = CreateObject( "Shell.Application" )

    '    Create a reference to the files and folders
    'Set objSource = objShell.NameSpace(pwd+myZipFile).Items( ) 
    Set objSource = objShell.NameSpace(myZipFile).Items( )

    '     Create a reference to the target folder
    Set objTarget = objShell.NameSpace(pwd+extractTo)
    Set objTarget = objShell.NameSpace(extractTo)
    intOptions = 256

    '     UnZIP the file
    objTarget.CopyHere objSource, intOptions

    '     Release the objects
    Set objSource = Nothing
    Set objTarget = Nothing
    Set objShell  = Nothing

    'Delete File from "P:\ZipFiles" after unzipping
    fso.DeleteFile f1, True

Next
4

1 回答 1

3

如果您仔细查看来自的答案pwd+...,您会注意到pwd不包含密码而是路径。该变量可能是以 Unix command 命名的,它代表“打印工作目录”。pwd

据我所知,该Shell.Application对象不支持解压缩受密码保护的 Zip 文件。您引用的问题的另一个答案建议使用DotNetZip library。或者你可以使用7-zip

Function qq(str)
  qq = Chr(34) & str & Chr(34)
End Function

zipfile  = "..."
password = "..."

Set sh = CreateObject("WScript.Shell")
sh.Run "7za.exe x " & qq(zipfile) & " -p" & qq(password), 0, True
于 2013-03-27T21:04:42.210 回答