69304
Goto Top

VB2008 - Backup eines kopletten Ordners inkl Subdirs - Zip und Dateiname aktuelles Datum

Hallo!

Ich bin gerade dabei ein VB-Command-Skript zu schreiben, was folgendes machen soll:

- Vorgegebenes Verzeichnis (inklusive Unterverzeichnisse) als Zip packen
- Dateiname des Zips soll ein vorgegebener String + Datum sein (z.B.: firma_20080929.zip)
- Zip soll an eine bestimmte Stelle kopiert werden (z.B.: C:\Backup\firma_20080929.zip)

An sich kein Problem - aber wie funktionier das mit dem Zip?

Gibts ja irgendwelche Routinen, oder muss ich es über ein externes Programm machen? Eigentlich hat ja Windows XP eine eingebaute Zip-Funktion, kann man die irgedwie nutzen?

mfg,
René.

Content-Key: 98035

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

Printed on: April 24, 2024 at 14:04 o'clock

Member: Wolfsrudel
Wolfsrudel Sep 29, 2008 at 08:07:01 (UTC)
Goto Top
Du kannst zusätzlich das Programm "GZIP" (http://www.gzip.org/) benutzen.
Hierbei müssen lediglich die enthaltenen .exe-Dateien ("gunzip.exe", "gzip.exe", "zcat.exe") in das Verzeichnis
"C:\WINDOWS\" (%windir%) kopiert/verschoben werden.

Dann kannst Du es per Kommandozeile aufrufen, bzw. in Deinem Script benutzen.
Optionen kannst Du per Manpage beziehungsweise "gzip -h".

Benutze das ganze für ein Windows-Logrotate und es funktioniert super.
Mitglied: 69304
69304 Sep 29, 2008 at 09:18:40 (UTC)
Goto Top
Gut, das mit dem GZip sieht soweit schon mal gut aus!

Aber wie "starte" ich die Anwendung aus VB heraus? Früher ging das glaub ich mit "Shell" oder so...
Mitglied: 69304
69304 Sep 29, 2008 at 10:02:24 (UTC)
Goto Top
OK, ich habs gefunden - aufruf mit Shell().

Aber ich bekomm beim ausführen dauernd:

C:\vb2008\DataBackupLN\DataBackupLN\bin\Release>gzip -c -k -r -9 -v -S .zip C:\lasernet\Huber100 > C:\lasernet\huber.zip
gzip: C:\lasernet\Huber100: Permission denied

Hat da wer eine Idee?
Member: Wolfsrudel
Wolfsrudel Sep 29, 2008 at 10:34:36 (UTC)
Goto Top
Wie die Meldung schon besagt, da fehlen Berechtigungen... als was/wer (lokaler Admin, User, whatever) startest Du das Script? Welche Berechtigungen sind für den Ordner "Huber100" vergeben?
Mitglied: 69304
69304 Sep 29, 2008 at 10:49:33 (UTC)
Goto Top
Starten tue ich es als Domainen-User. Hab mal die Berechtigungen für den Ordner an alle User auf Vollzugriff geändert.

Egal, ob ich das Skript starte oder aus der CMD direkt gzip.exe - es kommt immer die Fehlermeldung, dass ich keine Berechtigung hätte (s.o.)
Mitglied: 69304
69304 Sep 29, 2008 at 11:12:11 (UTC)
Goto Top
Habs jetzt gelöst!

Statt GZip verwende ich nun 7Zip. Da brauch ich nur die 7za.exe, mehr nicht.

Aufrufen tue ich es wie folgt:

In VB2008:
ExecuteBackup = "7za a -tzip -r " & ZipOutput & "\" & ZipDateiname & " " & ZipInput & "\*"  

In CMD:
C:\>7za a -tzip -r C:\lasernet\huber.zip C:\lasernet\Huber100\*

a = Add to Archiv
-tzip = Erweiterung als Zip, nicht als 7z
-r = Rekrusives Verhalten auf Ordner
%1 = Output-Archiv
%2 = Ordner (Mit * für alle Dateien)

Danke!
Member: bastla
bastla Sep 29, 2008 at 13:34:44 (UTC)
Goto Top
Noch als Ergänzung: Nur mit Bordmitteln (ab XP) sollte es auch gehen: Natively zipping Files in VB.net

Grüße
bastla
Mitglied: 69304
69304 Sep 29, 2008 at 14:49:15 (UTC)
Goto Top
Hallo bastla!

Das hört sich natürlich auch nicht schlecht an - aber...

"Requires reference to shell32.dll in %windir%\system32"

...ähm wie mache ich das?
Member: bastla
bastla Sep 29, 2008 at 15:36:02 (UTC)
Goto Top
Hallo rbrixel!

Über "Projekt / Verweis hinzufügen... / Durchsuchen" bzw besser: "Projekt / Verweis hinzufügen... / COM / Microsoft Shell Controls And Automation"

Grüße
bastla
Mitglied: 69304
69304 Oct 01, 2008 at 07:55:32 (UTC)
Goto Top
Also, habs jetzt soweit integriert. Läuft - ABER!

Es wird zwar eine Zip-Datei erzeugt, auch mit richtigem Dateiname, aber dieses Zip ist leer...

Die Funktion rufe ich wie folgt auf:

ZipFile(ZipInput, ZipDateiname)

Wenn ich mir es ausgeben lasse per Breakpoint, erhalte ich:

ZipFile(C:\lasernet\Huber100, C:\lasernet\huber100_20081001.zip)

Hat jemand die Funktion schon erfolgreich umsetzen können, oder jemand noch nen Tipp?

mfg,
René.
Member: bastla
bastla Oct 01, 2008 at 14:57:51 (UTC)
Goto Top
Hallo rbrixel!

Inzwischen habe ich es selbst getestet, und bei mir funktioniert es so für den Ordner "C:\lasernet\Huber100":
	Private Sub CreateZipFile(ByVal Filename As String)
		Dim Encoder As New System.Text.ASCIIEncoding
		Dim Header As String = "PK" & Chr(5) & Chr(6)  
		Header = Header.PadRight(22, Chr(0))
		My.Computer.FileSystem.WriteAllBytes(Filename, Encoder.GetBytes(Header), False)
	End Sub
	Private Sub ZipFile(ByVal Input As String, ByVal Filename As String)
		Dim Shell As New Shell32.Shell
		CreateZipFile(Filename)
		Shell.NameSpace(Filename).CopyHere(Input)
	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		Dim ZipInput As String= "C:\lasernet\Huber100"  
		Dim ZipDateiname As String = "C:\lasernet\huber100_20081001.zip"  
		ZipFile(ZipInput, ZipDateiname)
		MsgBox("Datei " & ZipDateiname & " erstellt.")  
	End Sub
Grüße
bastla
Member: 0belixx
0belixx Jun 16, 2011 at 08:55:54 (UTC)
Goto Top
Hallo Leute

ich muss das mal wieder aufleben lassen.

Zu dem vorherigen habe ich mal ne Frage, hat jemand eine Idee wie man mehrere belibige Ordner "zippen" kann?

Danke 0belixx