9

VBScript でフォルダーを ZIP 圧縮しようとしていますが、うまくいきません。ヘッダーファイルを正しく作成していると確信しています。

実際のファイルを正しく作成しますが、フォルダーを圧縮しません。

誰でもアイデアを得る:

Sub ArchiveFolder (folder)

    Dim fso, wShell, sApp, zipFile

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set wShell = CreateObject("WScript.Shell")  
    Set sApp = CreateObject("Shell.Application")
    Set zipFile = fso.CreateTextFile(folder & ".zip")

    ' Write zip file header.
    zipFile.Write "PK" & Chr(5) & Chr(6) & String(18, 0)
    zipFile.Close

    sApp.NameSpace(folder & ".zip").CopyHere folder

End Sub
4

3 に答える 3

13

ここで見つけた答え。Do..Loop魔法は、スクリプトがシェルがそれを実行するのを待つ最後の部分にあります。

ArchiveFolder "sub\foo.zip", "..\baz"

Sub ArchiveFolder (zipFile, sFolder)

    With CreateObject("Scripting.FileSystemObject")
        zipFile = .GetAbsolutePathName(zipFile)
        sFolder = .GetAbsolutePathName(sFolder)

        With .CreateTextFile(zipFile, True)
            .Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0))
        End With
    End With

    With CreateObject("Shell.Application")
        .NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items

        Do Until .NameSpace(zipFile).Items.Count = _
                 .NameSpace(sFolder).Items.Count
            WScript.Sleep 1000 
        Loop
    End With

End Sub
于 2013-02-28T19:04:21.360 に答える
1

あなたの主張を確認してください。folderzip ファイルに入れたいオブジェクトへのパスでなければなりません。folder.Pathフォルダー オブジェクトの場合は、フォルダー オブジェクトの既定のメソッドはNameでありCopyHere、名前だけではオブジェクトを見つけることができないため、を使用する必要があります。

関数にいくつかのデバッグ ステートメントを追加して、次のことを確認できます。

WScript.Echo TypeName(folder)
If fso.FolderExists(folder) Then
  WScript.Echo folder & " exists."
Else
  WScript.Echo folder & " doesn't exist."
End If
于 2013-02-28T18:23:14.770 に答える
0

%comspec% 経由で外部 zip ファイルを呼び出すことができます

oShell.Run "%comspec% /c c:\windows\7za.exe a " & oFile &".zip " & oFile & " -tzip",,True

ソースhttp://www.scriptlook.com/zip-large-files-in-a-directory-2/

于 2015-03-21T22:04:13.113 に答える