2013-02-28 17 views
6

VBScript'te bir klasörü yukarı ZIP çalışıyorum ve çalışmıyor gibi görünüyor. Eminim başlık dosyasını doğru şekilde oluşturuyorum.Bir klasöre Zip

Gerçek dosyayı doğru şekilde oluşturur, yalnızca dosyayı sıkıştırmaz.

Herkes herhangi bir fikir var:

Sub ArchiveFolder (folder) 

    Dim fso, wShell, sApp, zipFile 

    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set wShell = CreateObject("WScript.Shell") 
    Set sApp = CreateObject("Shell.Application") 
    Set zipFile = fso.CreateTextFile(folder & ".zip") 

    ' Write zip file header. 
    zipFile.Write "PK" & Chr(5) & Chr(6) & String(18, 0) 
    zipFile.Close 

    sApp.NameSpace(folder & ".zip").CopyHere folder 

End Sub 
+0

[Bunu kontrol]% COMSPEC% yoluyla harici zip dosyasını diyebiliriz (http://stackoverflow.com/questions/28043589/) zip yardımcı programı JScript'te yazılmıştır, ancak bunu harici işlem olarak veya wbs dosyasına vbscript kodunuzla koyabilirsiniz. – npocmaka

cevap

9

cevap ben here buldum. Büyü, komut dosyasının Shell'in işini yapmasını beklediği son Do..Loop'dur.

ArchiveFolder "sub\foo.zip", "..\baz" 

Sub ArchiveFolder (zipFile, sFolder) 

    With CreateObject("Scripting.FileSystemObject") 
     zipFile = .GetAbsolutePathName(zipFile) 
     sFolder = .GetAbsolutePathName(sFolder) 

     With .CreateTextFile(zipFile, True) 
      .Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0)) 
     End With 
    End With 

    With CreateObject("Shell.Application") 
     .NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items 

     Do Until .NameSpace(zipFile).Items.Count = _ 
       .NameSpace(sFolder).Items.Count 
      WScript.Sleep 1000 
     Loop 
    End With 

End Sub 
+0

Yukarıdaki kod çalışıyor, ancak zip dosyasını oluşturduktan sonra dosyayı kopyalayamıyoruz. Aynı zamanda dosyayı aynı hatayı almayı da denedim. Lütfen önermek – sanjeeb

1

sizin argüman kontrol edin. folder, zip dosyasına koymak istediğiniz nesnenin yolu olmalıdır. Bir klasör nesnesi ise, folder.Path kullanmak zorundasınız, çünkü varsayılan klasör nesnesi yöntemi Name ve CopyHere nesneyi yalnızca adıyla bulamıyor.

Bunu kontrol etmek için fonksiyona bazı hata ayıklama ifadeleri ekleyebilirsiniz:

WScript.Echo TypeName(folder) 
If fso.FolderExists(folder) Then 
    WScript.Echo folder & " exists." 
Else 
    WScript.Echo folder & " doesn't exist." 
End If