Ist es möglich, mit PowerShell ein Zip-Archiv zu erstellen?
powershell
zip
archive
Valentin Vasilyev
quelle
quelle
Antworten:
Wenn Sie zu CodePlex wechseln und die PowerShell-Community-Erweiterungen
write-zip
herunterladen , können Sie deren Cmdlet verwenden.Schon seit
Sie können zur PowerShell-Galerie gehen .
quelle
write-zip [input file/folder] [output file]
Eine reine PowerShell-Alternative, die mit PowerShell 3 und .NET 4.5 funktioniert (sofern Sie sie verwenden können):
Übergeben Sie einfach den vollständigen Pfad zu dem Zip-Archiv, das Sie erstellen möchten, und den vollständigen Pfad zu dem Verzeichnis, das die Dateien enthält, die Sie komprimieren möchten.
quelle
PowerShell v5.0 fügt hinzu
Compress-Archive
undExpand-Archive
Cmdlets. Die verlinkten Seiten enthalten vollständige Beispiele, aber das Wesentliche ist:quelle
Compress-Archive
Beschreibung: "... die maximale Dateigröße, die Sie mithilfe von Compress-Archive komprimieren können, beträgt derzeit 2 GB. Dies ist eine Einschränkung der zugrunde liegenden API." Wenn SieSystem.IO.Compression.ZipFile
diese Option jedoch verwenden , können Sie diese Einschränkung umgehen.System.IO.Compression.ZipFile
. Wenn das von Ihnen verwendete .NET Framework dieses Limit nicht hat, sollte CmdLet dieses Limit nicht erreichen. Ich habe im Code verifiziert.-OutputPath
Parameter.Eine native Methode mit dem neuesten .NET 4.5-Framework, jedoch ohne Funktionen:
Schaffung:
Extraktion:
Wie bereits erwähnt, völlig funktionslos. Erwarten Sie also kein Überschreibungsflag .
UPDATE: Weiter unten finden Sie weitere Entwickler, die dies im Laufe der Jahre erweitert haben ...
quelle
Installieren Sie 7zip (oder laden Sie stattdessen die Befehlszeilenversion herunter) und verwenden Sie diese PowerShell-Methode:
Sie können es so nennen:
quelle
& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
Lot hat sich geändert, seit die erste Antwort veröffentlicht wurde. Hier sind einige der neuesten Beispiele mit dem Befehl Compress-Archive .
Befehl zum Erstellen einer neuen Archivdatei
Draft.zip
durch Komprimieren von zwei DateienDraftdoc.docx
unddiagram2.vsd
angegeben durch denPath
Parameter. Die für diesen Vorgang angegebene Komprimierungsstufe ist Optimal.Befehl zum Erstellen einer neuen Archivdatei
Draft.zip
durch Komprimieren von zwei DateienDraft doc.docx
undDiagram [2].vsd
angegeben durch denLiteralPath
Parameter. Die für diesen Vorgang angegebene Komprimierungsstufe ist Optimal.Befehl zum Erstellen einer neuen Archivdatei
Draft.zip
imC:\Archives
Ordner. Die neue Archivdatei enthält alle Dateien im Ordner C: \ Reference , da im Parameter Path anstelle bestimmter Dateinamen ein Platzhalterzeichen verwendet wurde .Befehl erstellt ein Archiv aus einem ganzen Ordner,
C:\Reference
PowerShell hängt die
.zip
Erweiterung automatisch an den Dateinamen an.quelle
Bearbeiten Sie zwei - Dieser Code ist eine hässliche, hässliche Kluge aus alten Tagen. Du willst es nicht.
Dadurch wird der Inhalt von
.\in
to.\out.zip
mit System.IO.Packaging.ZipPackage gemäß dem hier gezeigten Beispiel komprimiertBearbeiten: Unzuverlässig für größere Dateien, möglicherweise> 10 MB, YMMV. Etwas zu tun mit Appdomain Beweise und isoliert Lagerung. Der freundlichere .NET 4.5- Ansatz funktioniert gut mit PS v3, wollte aber in meinem Fall mehr Speicher. Um .NET 4 von PS v2, Konfigurationsdateien benötigen einen verwenden nicht unterstützten zwicken .
quelle
Geben Sie unter einer anderen Option. Dadurch wird ein vollständiger Ordner komprimiert und das Archiv in einen bestimmten Pfad mit dem angegebenen Namen geschrieben.
Benötigt .NET 3 oder höher
quelle
Hier ist eine native Lösung für PowerShell v5 mit dem Cmdlet
Compress-Archive
Erstellen von Zip-Dateien mit PowerShell .Siehe auch Microsoft Docs for Compress-Archive .
Beispiel 1:
Beispiel 2:
Beispiel 3:
quelle
Für die Komprimierung würde ich eine Bibliothek verwenden (7-Zip ist gut, wie Michal vorschlägt ).
Wenn Sie 7-Zip installieren, enthält
7z.exe
das installierte Verzeichnis eine Konsolenanwendung.Sie können es direkt aufrufen und jede gewünschte Komprimierungsoption verwenden.
Wenn Sie sich mit der DLL beschäftigen möchten, sollte dies auch möglich sein.
7-Zip ist Freeware und Open Source.
quelle
Was ist mit
System.IO.Packaging.ZipPackage
?Es würde .NET 3.0 oder höher erfordern.
über Anders Hesselbom
quelle
Warum schaut sich niemand die Dokumentation an? Es gibt eine unterstützte Methode zum Erstellen einer leeren Zip-Datei und zum Hinzufügen einzelner Dateien, die in dieselbe .NET 4.5-Bibliothek integriert sind, auf die alle verweisen.
Unten finden Sie ein Codebeispiel:
Ich ermutige Sie in der Dokumentation zu sehen , wenn Sie irgendwelche Fragen.
quelle
Das ist wirklich dunkel, funktioniert aber. 7za.exe ist eine eigenständige Version von 7zip und ist mit dem Installationspaket verfügbar.
quelle
Wenn jemand eine einzelne Datei (und keinen Ordner) komprimieren muss : http://blogs.msdn.com/b/jerrydixon/archive/2014/08/08/zipping-a-single-file-with-powershell.aspx
quelle
Hier ist der Arbeitscode, der alle Dateien aus einem Quellordner komprimiert und eine Zip-Datei im Zielordner erstellt.
quelle
Hinweis:
ZipName: Vollständiger Pfad der Zip-Datei, die Sie erstellen möchten.
SourceDirectory: Vollständiger Pfad zum Verzeichnis mit den Dateien, die Sie komprimieren möchten.
quelle
Hier ist eine leicht verbesserte Version der Antwort von sonjz. Sie fügt eine Überschreiboption hinzu.
quelle
Dies sollte auch zum Komprimieren einer einzelnen Datei ohne Verwendung eines temporären Ordners und mit nativem .Net 4.5 funktionieren, das aus C # aus dieser StackOverflow- Antwort konvertiert wurde . Es verwendet eine schönere Syntax von hier .
Verwendung:
ZipFiles -zipFilename output.zip -sourceFile input.sql -filename name.inside.zip.sql
Code:
Verwenden von:
quelle
shell.application
Unternehmen oder 7-Zip / andere separate Dienstprogramme zu verwenden. Ich mag dieUsing-Object
Funktion auch, obwohl ich mich ohne diese für einen kürzeren, schnellen und schmutzigen Ansatz entschieden habe.Ich verwende dieses Snippet, um meinen Datenbanksicherungsordner auf noch nicht komprimierte Sicherungsdateien zu überprüfen, sie mit 7-Zip zu komprimieren und schließlich die
*.bak
Dateien zu löschen , um Speicherplatz zu sparen. Hinweisdateien werden vor der Komprimierung nach Länge (kleinste bis größte) sortiert, um zu vermeiden, dass einige Dateien nicht komprimiert werden.Hier können Sie ein PowerShell-Skript überprüfen , um diese Dateien über FTP zu sichern, zu komprimieren und zu übertragen .
quelle
Falls Sie WinRAR installiert haben:
Die Bedeutung der Argumente: afzip erstellt ein Zip-Archiv, df löscht Dateien, ep1 erstellt keinen vollständigen Verzeichnispfad innerhalb des Archivs
quelle
Hier ein vollständiges Befehlszeilenbeispiel zum Starten von cmd.exe oder von ssh oder was Sie wollen!
Grüße
quelle
Das Laden der
[System.IO.IOException]
Klasse und die Verwendung ihrer Methoden ist ein wichtiger Schritt, um unerwünschte Fehler zu unterdrücken, da es sich um eine Klasse handelt, die nicht in PowerShell enthalten ist. Erwarten Sie daher verschiedene Fehlerkontexte ohne diese Klasse.Ich habe mein Skript auf das T fehlergesteuert, aber während der Verwendung der
[System.IO.Compression.ZipFile]
Klasse wurde eine Menge zusätzlicher roter "Datei existiert" ausgegebenWas ich hier mache, ist das Abfangen dieser E / A-Fehler, z. B. der Zugriff auf bereits vorhandene Dateien, das Abfangen dieses Fehlers und das Weiterleiten an eine Protokolldatei, die ich mit einem größeren Programm verwalte.
quelle
Vollständige Befehlszeilenbefehle in Windows zum Komprimieren und Extrahieren von Verzeichnissen lauten wie folgt:
Zur Komprimierung:
Zum Extrahieren:
quelle
Der ionische Ansatz rockt:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
unterstützt Passwörter, andere Kryptomethoden usw.
quelle
Dieses Skript iteriert alle Verzeichnisse und komprimiert jedes
Get-ChildItem -Attributes d | foreach {write-zip $ .Name "$ ($ .Name) .zip"}
quelle