2

zip ファイルを作成して、3 つのフォルダーをその中にコピーしようとしています。行 33 char 1 でエラーが発生し、エラー状態オブジェクトが必要です。検索してグーグルで検索しましたが、読んでいるものを理解していないか、本当に検索する必要があるものを理解していないようです。とにかく、ここに私のコードがあります。

Option Explicit
Dim objFSO, objFolder1, objFolder2, objFolder3, FolderToZip, ziptoFile, FolderGroup
Dim ShellApp, eFile, oNewZip, strZipHeader
Dim ZipName, Folder, i, Zip, Item
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder1 = objFSO.GetFolder("C:\Windows\Temp\SMSTSLog")
Set objFolder2 = objFSO.GetFolder ("C:\Windows\System32\CCM\Logs")
Set objFolder3 = objFSO.GetFolder ("C:\Windows\SysWOW64\CCM\Logs")
'For Each efile In objFolder.Files
'  If DateDiff("d",eFile.DateLastModified,Now) >= 2 Then
'    objFSO.MoveFile eFile, "C:\Documents and Settings\User\Desktop\Test2\"
'  End If
'Next
Wscript.Sleep 2000
Set oNewZip = objFSO.OpenTextFile("C:\win7tools\testing script.zip", 8, True)
strZipHeader = "PK" & Chr(5) & Chr(6)
For i = 0 To 17
  strZipHeader = strZipHeader & Chr(0)
Next
oNewZip.Write strZipHeader
oNewZip.Close
Set oNewZip = Nothing
WScript.Sleep 5000
FolderGroup = Array(objFolder1,objFolder2,objFolder3)

FolderToZip = "FolderGroup"
ZipToFile = "C:\Win7tools\Test Script.zip"
Set ShellApp = CreateObject("Shell.Application")
Set Zip = ShellApp.NameSpace(ZipToFile)
'Set Folder = ShellApp.NameSpace(FolderToZip)
ShellApp.NameSpace(FolderGroup).CopyHere Zip.NameSpace(ZipToFile)
WScript.Sleep 10000

set ShellApp = Nothing
set FolderToZip = Nothing
set ZipToFile = Nothing
4

2 に答える 2

3

疑問がある場合は、次のドキュメントを参照してください。

retVal = Shell.NameSpace(
  vDir
)

パラメーター

vDir [入力]

     タイプ:バリアント

Folderオブジェクト     を作成するフォルダー。これは、フォルダーのパスを指定する文字列か、ShellSpecialFolderConstants値のいずれかです。ShellSpecialFolderConstantsにある定数名は、Visual Basic では使用できますが、VBScript や JScript では使用できないことに注意してください。そのような場合、代わりに数値を使用する必要があります。

このメソッドは、オブジェクトの配列ではなく、NameSpaceパスを含む文字列または のいずれかの整数値を想定しています。また、順番を間違えました。メソッドを呼び出すオブジェクトは zip ファイルです。引数は、zip ファイルにコピーするものです (ここではパス文字列で問題ありません)。さらに、作成する zip ファイルの名前は、フォルダーを追加しようとする zip ファイルの名前とは異なります。ShellSpecialFolderConstantsFoldercopyHere

コードを次のように変更します。

folder1 = "C:\Windows\Temp\SMSTSLog"
folder2 = "C:\Windows\System32\CCM\Logs"
folder3 = "C:\Windows\SysWOW64\CCM\Logs"
zipfile = "C:\Win7tools\Test Script.zip"

Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.OpenTextFile(zipfile, 2, True).Write "PK" & Chr(5) & Chr(6) _
  & String(18, Chr(0))

Set ShellApp = CreateObject("Shell.Application")
Set zip = ShellApp.NameSpace(zipfile)
zip.CopyHere folder1
zip.CopyHere folder2
zip.CopyHere folder3

WScript.Sleep 10000
于 2013-10-10T20:02:55.270 に答える
1

WinZip にはコマンド ライン インターフェイスがあります。バージョンによっては、ダウンロードしてインストールする必要がある場合があります: http://www.winzip.com/prodpagecl.htm

以下は、WinZip バージョン 9.0 で機能するテスト スクリプトです。

Const WinZip = "C:\Program Files\WinZip9.0\wzzip.exe"  'WinZip Version 9.0

BasePath = "C:\Path\To\Folders\"

strZipFilePath = BasePath & "Test.zip"
strArchiveMe = BasePath & "Folder_A"

Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

If Not objFSO.FileExists(WinZip) Then
    MsgBox "WinZip (wzzip.exe) Does Not Exist"
    WScript.Quit
End If

'''// For Below Command - Change "-a" TO "-mu" To Auto Delete The file After Zip Is Created
'''// For Below Command - Change "-yb" TO "-ybc" To Answer YES To all Promps and not Terminate Operation
strcommand = Chr(34) & WinZip & Chr(34) & " -a -yb " & Chr(34) & strZipFilePath & Chr(34) & " " & Chr(34) & strArchiveMe & Chr(34)
objShell.Run strcommand, 1, True

コマンドの形式は次のとおりです。

winzip [action] [options] [Zip Path] [Path to file/folder to zip]
于 2013-10-10T19:54:45.773 に答える