Вы можете использовать фильтр. Волшебство здесь:
SHCONTF_NONFOLDERS = 64
colFolderItems.Filter SHCONTF_NONFOLDERS, "*.ext"
Вот это в контексте с вашим кодом:
'To use this at command-line, call `CScript.exe zip_it.vbs SourceDirectory PathToOutputZipFileIncludingDotZipExt "file.pattern"`
Set parameters = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
SourceDir = FS.GetAbsolutePathName(parameters(0))
ZipFile = FS.GetAbsolutePathName(parameters(1))
FileFilter = parameters(2)
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set shell = CreateObject("Shell.Application")
Set source_objects = shell.NameSpace(SourceDir).Items
SHCONTF_NONFOLDERS = 64
source_objects.Filter SHCONTF_NONFOLDERS, FileFilter
shell.NameSpace(ZipFile).CopyHere(source_objects)
wScript.Sleep 400
Это можно вызвать с помощью «* .txt», чтобы выбрать только текстовые файлы, или «* .exe», чтобы собрать только исполняемые файлы. Также обратите внимание, что он не играет хорошо, если не включен фильтр файлов.
Тем не менее, ваш код предназначен для повторного создания ZIP каждый раз, поэтому вам нужно сначала проверить наличие файла, если вы хотите повторно вызывать дополнительные типы файлов. Это изменение делает это:
If Not FS.FileExists (ZipFile) Then
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
End If
Это имеет побочный эффект: появляется (и почти сразу же скрывается) приглашение перезаписи, если файлы уже существуют в zip-файле. С этим изменением вы можете сделать это:
cscript //nologo zip_it.vbs thefolder thefile.zip "*.txt"
cscript //nologo zip_it.vbs thefolder thefile.zip "*.doc"
Его можно изменить, чтобы перебирать типы файлов или расширения и собирать все файлы, если нет фильтра, например:
'To use this at command-line, call `CScript.exe zip_it.vbs SourceDirectory PathToOutputZipFileIncludingDotZipExt "file.pattern" "file2.pattern"`
Set parameters = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
SourceDir = FS.GetAbsolutePathName(parameters(0))
ZipFile = FS.GetAbsolutePathName(parameters(1))
SHCONTF_NONFOLDERS = 64
If Not FS.FileExists (ZipFile) Then
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
End If
Set shell = CreateObject("Shell.Application")
If parameters.Count > 2 Then
For lParams = 2 to (parameters.Count-1)
FileFilter = parameters(lParams)
Set source_objects = shell.NameSpace(SourceDir).Items
source_objects.Filter SHCONTF_NONFOLDERS, FileFilter
shell.NameSpace(ZipFile).CopyHere(source_objects)
wScript.Sleep 400
Next
Else
Set source_objects = shell.NameSpace(SourceDir).Items
shell.NameSpace(ZipFile).CopyHere(source_objects)
wScript.Sleep 400
End If
Это можно назвать так:
cscript //nologo zip_it.vbs thefolder thefile.zip "*.doc" "*.txt"