rycodepsyco
Goto Top

Datei per CMD Konsolen Befehl - in Windows mitgeliefertes Standard ZIP packen - ohne extra Tools(ZIP, RAR, 7-ZIP)

Hallo, wie die Überschrift es schon sagt, ich möchte mit Boardmitteln also ohne ein Tool / Programm extra installieren zu müssen, per Konsole eine Datei oder Verzeichnis in das ZIP Archiv packen.

Es ist gleichbedeutend wie: Mausrechtsklick auf Datei oder ein Ordner / Senden an... / ZIP-Komprimierter Ordner

Wie lautet der Befehl in der klassischen Windows CMD Konsole?

Vielen Dank

Content-Key: 367177

Url: https://administrator.de/contentid/367177

Printed on: April 19, 2024 at 21:04 o'clock

Member: emeriks
emeriks Mar 07, 2018 at 07:59:12 (UTC)
Goto Top
Hi,
PowerShell kann das.

How to create a zip archive with PowerShell?

Dort ist unter 222 der simple Code für eine entsprechende Funktion.

PowerShell 5 kann es sogar von Haus aus.
Compress-Archive

E.

Und Google kann das auch ... face-wink
Member: RycoDePsyco
RycoDePsyco Mar 07, 2018 at 09:40:03 (UTC)
Goto Top
Danke dir.

Gibt es dass oder geht dass auch mit CMD Standard?
Member: colinardo
colinardo Mar 07, 2018 updated at 10:03:53 (UTC)
Goto Top
Servus.
Die Frage ist schon so alt wie Windows selbst face-smile. Daran sieht man mal wieder wie sich Microsoft die letzten Jahre um die Community gekümmert hat, die kümmert sich dann halt meist selber.
Zitat von @RycoDePsyco:
Gibt es dass oder geht dass auch mit CMD Standard?
Wenn du alles in die Batch packen willst geht auch das

Beispiel um alle *.txt Dateien im Ordner D:\Quelle in das Zipfile unter D:\myfile.zip zu packen.
(mind. .NET 4.5)
@echo off
powershell -Executionpolicy ByPass -Command "Add-Type -AssemblyName System.IO.Compression;Add-Type -AssemblyName System.IO.Compression.FileSystem;$zip = [System.IO.Compression.ZipFile]::Open('D:\myfile.zip',[System.IO.Compression.ZipArchiveMode]::Create);gci 'D:\quelle\*.txt' | %%{[void][System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip,$_.FullName,$_.Name)};$zip.Dispose()"  
Alternativ geht ganze geht auch mit VBS in einer Batch (Shell.Application Namespace Objekt) ohne extra Utilities. Bei Bedarf liefere ich auch den Code nach wenn gewünscht.

Mit reiner Batch(cmd) hat Windows selbst keine Commandline-Utilities.

Das was Windows selbst noch an Kompressionstools mitbringt ist ein Selfextracting EXE Tool namens iexpress.exe und auch noch das Tool compact, aber die erzeugen natürlich kein Standard-ZIP.

Grüße Uwe
Member: RycoDePsyco
RycoDePsyco Mar 07, 2018 at 10:44:55 (UTC)
Goto Top
Das dies so Aufwendig ist, war mir nicht bewusst.

Es geht eigentlich nur darum das ich eine Datei "SQLdaten.bak" komprimieren will und das sollte auf ein Server kopiert werden.
Deswegen sollte es nicht so unkomprimiert groß werden.

compact hatte ich mal getestet, aber war nun nicht das was ich erwartet hatte.

Ich wollte was einfaches bauen um nach einer SQL Sicherung diese zu komprimieren, diese dann auf ein Server über das schmale Internet hochzuladen als Backup.
Dabei wollte ich dies so gestalten das keine Tools erforderlich sind, falls ich es nochmals wo anders auf ein nicht mir gehörenden Drittrechner brauchen sollte.
Ob dort PowerShell vergfügbar ist, ist mir leider nicht immer pauschal bewusst, da es noch Leute gibt die weiterhin WinXP im Einsatz haben und ich auch nicht genau weiß seit wann die PowerShell in Windows mit diesen Befehlen integriert wurde.
Bin da eher der Leihe.
Ist auch nicht Standard, daher hier auch die Frage.

CMD ist somit der lang anhaltenden Kompatibilität geschuldet und das die SQL bereits über CMD gesichert wird, was dann in einem Aufwasch geschehen soll.

Wenn du mir daher weiterhelfen kannst, wäre ich sehr dankbar.
Member: emeriks
emeriks Mar 07, 2018 at 10:47:34 (UTC)
Goto Top
Aufwändig??!
Member: colinardo
colinardo Mar 07, 2018, updated at Mar 08, 2018 at 15:02:22 (UTC)
Goto Top
Dabei wollte ich dies so gestalten das keine Tools erforderlich sind, falls ich es nochmals wo anders auf ein nicht mir gehörenden Drittrechner brauchen sollte.
Wenn schon eine Batch mitgeliefert wird dann ist doch eine kleine exe auch kein Problem mehr.
Oder man schreibt sich gleich eine Anwendung (c# /AutoIt) die alle nötige enthält.

VBS geht auch ohne zusätzl. Tools
Sub AddZip (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 500 
        Loop
    End With
End Sub
Oder das VBS direkt in die Batch integriert:
@echo off &setlocal
set "tmpfile=%temp%\pack.vbs"  
>"%tmpfile%" (  
	echo With CreateObject^("Scripting.FileSystemObject"^)  
  echo zipFile ^= .GetAbsolutePathName^(wscript.Arguments^(0^)^)
  echo sFolder ^= .GetAbsolutePathName^(wscript.Arguments^(1^)^)
  echo sFile ^= .GetFileName^(wscript.Arguments^(1^)^)
  echo With .CreateTextFile^(zipFile, True^)
  echo .Write Chr^(80^) ^& Chr^(75^) ^& Chr^(5^) ^& Chr^(6^) ^& String^(18, chr^(0^)^)
  echo End With
  echo End With
	echo With CreateObject^("Shell.Application"^)  
  echo .NameSpace^(zipFile^).CopyHere .NameSpace^(sFolder^).ParseName^(sFile^)
  echo Do Until .NameSpace^(zipFile^).Items.Count ^= 1
  echo WScript.Sleep 500 
  echo Loop
  echo End With
)

wscript //NOLOGO "%tmpfile%" "D:\myfile.zip" "D:\Ordner\datei.sql" 
Also Auswahl gibt es genug...
Das dies so Aufwendig ist, war mir nicht bewusst.
?? Ich seh da keinen Aufwand face-smile. Windows halt ...
die weiterhin WinXP im Einsatz haben
Schlach mich tot. Ich fahr jetzt schnell mal mit dem Dampfschiff ans andere Ufer face-smile.
Member: RycoDePsyco
RycoDePsyco Mar 08, 2018 at 14:33:48 (UTC)
Goto Top
Deine Lösung für die letztere Batch ist sehr gut.

Muss aber noch einmal betonen ich bin Leihe, ich selbst hätte das nicht mal ansatzweise gewusst.
Was für dich kalter Kaffee ist, sind für mich Welten.

Für mich wäre das ein sehr großer Aufwand gewesen, daher danke ich euch sehr wohl.
Und Ja es gibt noch viele Leuts die XP im Einsatz haben, Sie haben entweder gar keine Ahnung und fassen nichts an oder können sich neues nichts leisten.
Aber es bessert sich.


Eine Frage zur VB Batch habe ich noch.

Wenn im Ordner ein leerer Ordner existiert, dann gibt es eine Fehlermeldung und die Konsole bleibt offen stehen.
Kann man dies so gestallten das der leere Ordner auch gesichert wird oder das Fehlermeldungen allgemein ignoriert werden?

Habe auch versucht eine einzelne Datei Zippen zu lassen, leider steigt dann das Script aus.

Da ich leider null Ahnung habe, frage ich hier noch einmal ganz vorsichtig an ob du dies noch bereinigen könntest? face-smile