it-swarm.com.de

Wie können Sie das Skript mit NUR den in Windows integrierten Funktionen komprimieren oder dekomprimieren?

In Windows können Sie einige Dateien nach komprimieren

rechtsklick → Senden an Komprimierter (gezippter) Ordner

Und entpacken Sie durch Doppelklick auf die Datei .Zip und extrahieren Sie die Dateien.

Gibt es eine Möglichkeit, diese Fähigkeiten über ein Skript (.bat-Datei) anzuwenden ohne dass Software von Drittanbietern installiert werden muss?

266
Roee Gavirel

Das war 2013 noch nicht möglich. Microsoft hat hierfür keine ausführbare Datei bereitgestellt.

Unter diesem Link erfahren Sie, wie Sie dies mit VBS tun können. https://superuser.com/questions/201371/create-Zip-folder-from-the-command-line-windows

Ab Windows 8 ist .NET Framework 4.5 standardmäßig installiert. Mit System.IO.Compression.ZipArchive und PowerShell kann man Skripte schreiben, um dies zu erreichen. Siehe https: // stackoverflow.com/a/26843122/71312

76
Diryboy

Um die PowerShell-Lösung von Steven Penny zu erweitern, können Sie sie in eine Batch-Datei integrieren, indem Sie powershell.exe wie folgt aufrufen:

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.Zip', 'bar'); }"

Wie Ivan Shilo sagte, funktioniert dies nicht mit PowerShell 2, es erfordert PowerShell 3 oder höher und .NET Framework 4.

167
Jason Duffett

Ab . NET 4.5 kann PowerShell Folgendes ausführen:

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.Zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.Zip', 'bar')

In den letzten beiden Zeilen können bar und foo durch den Namen ersetzt werden, den der Ordner haben soll, oder durch den Namen des bereits vorhandenen Ordners. foo.Zip fungiert in beiden Fällen als Zip-Datei zum Speichern oder Entpacken.

152
Steven Penny

Wenn Sie Java installiert haben, können Sie mit dem Befehl jar in ein Zip-Archiv komprimieren:

jar -cMf targetArchive.Zip sourceDirectory

c = Erstellt eine neue Archivdatei.

M = Gibt an, dass dem Archiv keine Manifestdatei hinzugefügt werden soll.

f = Gibt den Namen der Zieldatei an.

123
Noam Manos

PowerShell 5.0

Ab Microsoft.PowerShell.Archive können Sie Folgendes verwenden:

Z.B.:

  • Erstelle _result.Zip_ aus dem gesamten Test Ordner:

    _Compress-Archive -Path C:\Test -DestinationPath C:\result
    _
  • Extrahieren Sie den Inhalt von _result.Zip_ im angegebenen Ordner Test:

    _Expand-Archive -Path result.Zip -DestinationPath C:\Test
    _
67

Es ist nicht gerade eine Zip-Datei, aber die einzige Möglichkeit, eine Datei mit Windows-Tools zu komprimieren, ist:

makecab <source> <dest>.cab

So dekomprimieren Sie:

expand <source>.cab <dest>

Erweitertes Beispiel (von ss64.com):

Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"

Weitere Informationen: makecab , expand , erweiterte Verwendung von makecab

37

Mit 7-Zip:

Zip: Sie haben einen Ordner foo und möchten ihn in myzip.Zip komprimieren.

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.Zip -w foo -mem=AES256

nzip: Sie möchten es (myzip.Zip) in das aktuelle Verzeichnis (./) entpacken

"C:\Program Files\7-Zip\7z.exe" x  myzip.Zip  -o./ -y -r
27
Monir

Ich habe versucht, genau diese Frage zu beantworten, und nach meinen Recherchen scheint DiryBoys Antwort genau zu sein.

Ich habe festgestellt, dass das Programm compact.exe Dateien komprimiert, aber keine stark komprimierten Dateien (oder Dateigruppen) erstellt. Dies ähnelt der Option, die Sie erhalten, wenn Sie mit der rechten Maustaste auf einen Laufwerksbuchstaben oder eine Partition in Windows klicken. Sie haben die Möglichkeit, Bereinigungen durchzuführen (temporäre Dateien usw. zu entfernen) und Dateien zu komprimieren. Auf die komprimierten Dateien kann weiterhin zugegriffen werden, sie werden jedoch nur komprimiert, um Speicherplatz auf einem Laufwerk mit wenig Speicherplatz zu schaffen.

Ich fand auch compress.exe, das ich zufällig auf meinem Computer hatte. Es ist auf den meisten Windows-Computern nicht nativ und Teil des Resource Kits 2003. Es erstellt zwar eine Art ZIP-Datei, ähnelt jedoch eher Dateien von einer Windows-Installationsdiskette (der Unterstrich ist das letzte Zeichen der Dateierweiterung oder des Dateinamens). Und der Befehl extract.exe extrahiert diese Dateien.

Das Mantra lautet jedoch: Wenn es nativ über die GUI ausgeführt werden kann, gibt es wahrscheinlich eine Möglichkeit, dies über Batch, .vbs oder eine andere Art von Skript in der Befehlszeile auszuführen. Da Windows die Option "Senden an" zum Erstellen einer Zip-Datei hatte, wusste ich, dass es eine Möglichkeit geben musste, dies über die Befehlszeile zu tun, und fand einige Optionen.

Hier ist ein großartiger Link, der zeigt, wie eine Datei mit nativen Windows-Befehlen komprimiert wird.

https://superuser.com/questions/110991/can-you-Zip-a-file-from-the-command-Prompt- using-only-windows-built-in-capabili

Ich habe es mit einem Verzeichnis getestet, das mehrere verschachtelte Dateien und Ordner enthält, und es hat einwandfrei funktioniert. Folgen Sie einfach dem Format der Befehlszeile.

Es gibt auch eine Möglichkeit, die Dateien über die Kommandozeile zu entpacken, die ich ebenfalls gefunden habe. Auf eine Weise wird nur ein Explorer-Fenster geöffnet, in dem der Inhalt der komprimierten Datei angezeigt wird. Einige von ihnen verwenden auch Java, was nicht unbedingt für Windows typisch ist, aber so häufig vorkommt, dass es fast so scheint.

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

Wie entpacke ich eine Datei über die Kommandozeile?

8
LostUser

Sie können ein VBScript-Skript verwenden, das in eine BAT-Datei eingebunden ist. Dieser Code funktioniert auf einem relativen Pfad.

Tools oder Abhängigkeiten von Drittanbietern sind nicht erforderlich. Stellen Sie einfach SOURCEDIR und OUTPUTZIP ein.

Dateiname: ZipUp.bat

echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs

' Create empty Zip file.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipup.vbs

echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs

echo ' Keep script waiting until compression is done
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo     WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs

CScript  _zipup.vbs  %SOURCEDIR%  %OUTPUTZIP%

del _zipup.vbs

Anwendungsbeispiel

SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.Zip
CALL ZipUp

Alternativ können Sie diese Datei parametrisieren, indem Sie die Zeile CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP% durch CScript _zipup.vbs %1 %2 ersetzen. In diesem Fall können Sie sie noch einfacher aufrufen, indem Sie CALL ZipUp C:\Source\Dir C:\Archive.Zip aufrufen.

7
PodTech.io

Open Source ist dein Freund :-)

Hier ist das Entpacken : http://gnuwin32.sourceforge.net/packages/unzip.htm

Es gibt auch einen Zip-Befehl: http://gnuwin32.sourceforge.net/packages/Zip.htm

Der Download von Binärdateien ist ausreichend.

3
JanBorup

Wenn Sie dies als Teil eines Skripts tun müssen, ist der beste Weg, Java zu verwenden. Angenommen, das bin-Verzeichnis befindet sich in Ihrem Pfad (in den meisten Fällen), können Sie die folgende Befehlszeile verwenden:

jar xf test.Zip

Wenn sich Java nicht in Ihrem Pfad befindet, verweisen Sie direkt darauf:

C:\Java\jdk1.6.0_03\bin>jar xf test.Zip
2
eddyoc

Sie sagen, Sie versuchen dies ohne Software von Drittanbietern. Ich bin mir nicht sicher, ob Sie .NET-Software von Drittanbietern in Betracht ziehen.

Sie können jedoch in .NET Ihr eigenes Befehlszeilendienstprogramm erstellen. Es sollte nicht mehr als ein paar Codezeilen erfordern.

ZipFile-Klasse

1
NL3294

Ich habe ein Problem mit all diesen Lösungen. Sie sind nicht genau gleich, und sie alle erstellen Dateien, deren Größe sich geringfügig von der Größe von RMB --> send to --> compressed (zipped) folder unterscheidet, wenn sie aus denselben Dateien erstellt werden Quellverzeichnis. Der größte Unterschied, den ich hatte, ist ein Unterschied von 300 KB (script> manual), erstellt mit:

powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.Zip

(Beachten Sie das - CompressionLevel . Es gibt drei mögliche Werte : Fastest, NoCompression & Optimal, (Default: Optimal))

Ich wollte eine .bat-Datei erstellen, die einen WordPress Plugin-Ordner, an dem ich arbeite, automatisch in ein .Zip-Archiv komprimiert, damit ich sie auf die WordPress Site hochladen und Testen Sie das Plugin.

Aber aus irgendeinem Grund funktioniert es mit keiner dieser automatischen Komprimierungen, , aber funktioniert es mit der manuellen RMB Komprimierung, die ich wirklich seltsam finde.

Und die von Skripten erstellten .Zip-Dateien brechen die WordPress Plugins tatsächlich bis zu dem Punkt, an dem sie nicht aktiviert werden können, und sie können auch nicht aus WordPress heraus gelöscht werden. Ich muss in die "Rückseite" des Servers SSH und die hochgeladenen Plugin-Dateien selbst manuell löschen. Während die manuell RMB-generierten Dateien normal funktionieren.

0
Sebastian Norr