Komprimieren Sie Dateien in den Ordner zur zip-Datei mit PS

Ich habe die folgenden Skripte komprimieren eines Ordners (alle Dateien im Ordner) in eine zip-Datei:

 set-content $zipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
 $ZipFile = (new-object -com shell.application).NameSpace($zipFileName) 
 Get-ChildItem $folder | foreach {$zipFile.CopyHere($_.fullname)} 

wobei $Ordner = "C:\Test" und $zipFileName = "C:\data\test.zip" als Beispiel

Es funktioniert gut, wenn "C:\Test" enthält keine leeren sub-Ordner, und es scheint funktioniert rekursiv komprimieren Sie alle Dateien in Unterordnern. Ich wirklich wie über einfache Online-Skript. Zum Beispiel:

C:\Test
   file1.dat
   file2.dat
   Test-Sub
      File21.bat
      ....

Allerdings bekam ich Fehler in einem Fall. Ich finde, dass es hier keine leeren Ordner, wie "C:\Test\EmptySub",

C:\Test
   file1.dat
   file2.dat
   Test-Sub
      File21.bat
      ....
   EmptySub
   AnotherSub
      file31.sp1
      ...

wird das script einen Fehler erzeugen. Ich habe versucht, die folgenden scripts:

Get-ChildItem $files -Recurse | foreach { if (!$_.PSIsContainer) 
    {$zipFile.CopyHere($_.fullname)}} 

Dieser funktioniert nicht wie erwartet. Es ist einfach überspringt alle sub-Ordner. Nicht sicher, ob es filter oder-Klausel zur Verfügung zu überspringen, alle leeren Unterordner?

Aktualisiert: Basierend auf schlägt, probierte ich es aus. Mein problem hat sich nicht aufgelöst werden. Hier ist das update von meiner Frage. Zuerst habe ich aktualisiert, die Scripte vor, um zu zeigen, wie $zipFile-Objekt erzeugt. Zweitens habe ich die vorgeschlagenen codes:

Get-ChildItem $files | ? { -not ($_.PSIsContainer -eq $True -and 
  $_.GetFiles().Count -eq 0) } | % {$zipfile.CopyHere($_.fullname)}

Habe ich versucht über updates auf meinem Windows XP, es funktioniert mit leeren Unterordner. Aber die gleichen codes nicht workin in Windows-2003-Server. Im folgenden ist die Fehlermeldung:

[Window Title]
Zip-komprimierte Ordner-Fehler

[Inhalt]
Datei nicht gefunden oder keine Leseberechtigung.

[OK]

Nicht sicher, ob dieser Typ PK-Objekt funktioniert in Windows-2003-server, oder wenn es andere Einstellungen für das Objekt.

InformationsquelleAutor David.Chu.ca | 2011-04-12
Schreibe einen Kommentar