プログラミング

VBScript での zip ファイルの作成

2006年11月21日

 WSH を用いてZIPファイルを作成する方法を探していたが、Windows XPだと以外に簡単に出来ることが判明。

option explicit
Dim files(0)
files(0)=".\test.txt"
Call MakeZip(".\temp.zip",files)

Sub MakeZip(ByVal ZipPath, ByRef FileArray)
  Dim sfo,app,file,num
  Set sfo=CreateObject("Scripting.FileSystemObject")
  Set app = CreateObject("Shell.Application")
  ZipPath=sfo.GetAbsolutePathName(ZipPath)

  'Create empty zip file
  Dim arrHex, sBin, i
  arrHex = Array(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
  For i = 0 To UBound(arrHex)
    sBin = sBin + Chr(arrHex(i))
  Next
  With sfo.CreateTextFile(ZipPath, True)
      .Write sBin
      .Close
  End With
  
  'Copy the file(s) into the zip file
  num=0
  For Each file In FileArray
    If CStr(file)<>"" Then
      file=sfo.GetAbsolutePathName(file)
      app.Namespace(ZipPath).CopyHere(file)
      num=num+1
      'Wait until "CopyHere" command is done
      Do Until app.Namespace(ZipPath).items.Count=num
        WScript.sleep 1
      Loop
    End If
  Next

End Sub
(2012-11-27 改定)

参考1 参考2 参考3

コメント

Katsumi (2007年7月24日 14:39:16)

すべてのコピーが終了する前にShell.Applicationオブジェクトを破棄してしまうことでファイルがZIPフォルダにコピーされない不具合があったが、改訂版で解消した(2007-07-24)。

Katsumi (2012年11月27日 13:30:46)

多数のファイルを選択したときに一部コピーされないファイルがある問題を解消(2012-11-27)。

コメント送信