上記の解決策はすべて正確ですが、決定的なものではありません。
圧縮されたファイルを一時フォルダーに解凍しようとすると、解凍しようとしている ZIP ファイル内に含まれる各ファイルに対して、"Temporary Folder For YOURFILE.zip " を表示するフォルダーがすぐに作成されます (C:\DocumentsおよびSettings\USERNAME\Local Settings\Temp) 。
そうです、50 個のファイルがある場合、一時ディレクトリ内に 50 個のフォルダーが作成されます。
しかし、200 個のファイルがある場合、99 個で停止し、「 The File Exists 」というメッセージが表示されてクラッシュします。
..
どうやら、これは Windows 7 では発生せず、上記の貢献が見られます。しかし、とにかく、小切手を持つことができます。さて、これはあなたがそれを修正する方法です:
'========================
'Sub: UnzipFiles
'Language: vbscript
'Usage: UnzipFiles("C:\dir", "extract.zip")
'Definition: UnzipFiles([Directory where zip is located & where files will be extracted], [zip file name])
'========================
Sub UnzipFiles(folder, file)
Dim sa, filesInzip, zfile, fso, i : i = 1
Set sa = CreateObject("Shell.Application")
Set filesInzip=sa.NameSpace(folder&file).items
For Each zfile In filesInzip
If Not fso.FileExists(folder & zfile) Then
sa.NameSpace(folder).CopyHere(zfile), &H100
i = i + 1
End If
If i = 99 Then
zCleanup(file, i)
i = 1
End If
Next
If i > 1 Then
zCleanup(file, i)
End If
fso.DeleteFile(folder&file)
End Sub
'========================
'Sub: zCleanup
'Language: vbscript
'Usage: zCleanup("filename.zip", 4)
'Definition: zCleanup([Filename of Zip previously extracted], [Number of files within zip container])
'========================
Sub zCleanUp(file, count)
'Clean up
Dim i, fso
Set fso = CreateObject("Scripting.FileSystemObject")
For i = 1 To count
If fso.FolderExists(fso.GetSpecialFolder(2) & "\Temporary Directory " & i & " for " & file) = True Then
text = fso.DeleteFolder(fso.GetSpecialFolder(2) & "\Temporary Directory " & i & " for " & file, True)
Else
Exit For
End If
Next
End Sub
以上で、これら 2 つの関数を VBScript でホストされているプログラムにコピー アンド ペーストすれば、Windows XP と Windows 7 で準備完了です。
ありがとう!