Sie können einen Filter verwenden. Die Magie ist hier:
SHCONTF_NONFOLDERS = 64 colFolderItems.Filter SHCONTF_NONFOLDERS, "*.ext"
Hier steht es in Zusammenhang mit Ihrem Code:
'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
Dies kann mit "* .txt" aufgerufen werden, um nur Textdateien auszuwählen, oder "* .exe", um nur Exe-Dateien zu sammeln. Beachten Sie auch, dass es nicht gut läuft, wenn kein Dateifilter enthalten ist.
Ihr Code ist jedoch so konzipiert, dass er die ZIP-Datei jedes Mal neu erstellt. Sie müssen also zunächst prüfen, ob die Datei vorhanden ist, wenn Sie wiederholt nach zusätzlichen Dateitypen aufrufen möchten. Diese Änderung macht das:
If Not FS.FileExists (ZipFile) Then CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar) End If
Dies hat den Nebeneffekt, dass eine Eingabeaufforderung zum Überschreiben eingeblendet wird (und fast sofort ausgeblendet wird), wenn die Dateien bereits in der ZIP-Datei vorhanden sind. Mit dieser Änderung könnten Sie Folgendes tun:
cscript //nologo zip_it.vbs thefolder thefile.zip "*.txt" cscript //nologo zip_it.vbs thefolder thefile.zip "*.doc"
Es kann geändert werden, um Dateitypen oder Erweiterungen zu durchlaufen und alle Dateien zu sammeln, wenn kein Filter vorhanden ist.
'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
Das könnte man so nennen:
cscript //nologo zip_it.vbs thefolder thefile.zip "*.doc" "*.txt"