Вы можете использовать фильтр. Волшебство здесь:
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"