Все приведенные выше решения являются точными, но они не являются окончательными.
Если вы пытаетесь извлечь zip-файл во временную папку, папка, которая отображает «Temporary Folder For YOURFILE.zip», будет немедленно создана (в C:\Documents
и Settings\USERNAME\Local Settings\Temp
) для КАЖДЫЙ ФАЙЛ содержится в вашем ZIP-файле, который вы пытаетесь извлечь.
Правильно, если у вас есть 50 файлов, он создаст 50 папок в вашем временном каталоге.
Но , если у вас есть 200 файлов, он остановится на 99 и вылетит с сообщением - Файл существует .
..
Очевидно, что это не происходит в 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
И это все, скопируйте и вставьте эти две функции в вашу программу, размещенную на VBScript, и вы должны быть готовы к работе на Windows XP и Windows 7.
Спасибо!