Registriert seit: 22.01.2018
Version(en): 2010, 2016
Guten Morgen,
ich bin dabei Bestimmte Dateien in einem Ordner zu Zippen. Was ich jedoch noch nicht geschafft habe ist, einen kompletten Unterordner zu Zippen.
Beispiel:
Ordner>1.pdf
Ordner>2.pdf
Ordner>Unterordner>3.pdf
Ordner>Unterordner>4.pdf
Mein Ziel ist es, eigentlich jetzt eine Zipdatei von dem Unterordner zu erstellen.
Folgender Code erzeugt Zip-Dateien für 1.pdf und 2.pdf, eine Zip Datei für den gesamten Unterordner gibts leider nicht.
Code:
Sub Zippen()
Dim sDatei As String
Dim sPfad As String
sPfad = "K:\PROJEKT\PDF-Dateien\"
ChDrive sPfad
ChDir sPfad
sDatei = Dir("*.*")
Do While sDatei <> ""
zipName = Left(sDatei, Len(sDatei) - 4) & ".zip"
Shell "C:\Program Files\7-Zip\7z.exe a " & sPfad & zipName & " " & sDatei
sDatei = Dir
Loop
End Sub
Habt ihr eine Idee?
Vielen dank und grüße. :)
Registriert seit: 06.12.2015
Version(en): 2016
16.05.2019, 09:24
(Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2019, 09:25 von Fennek.)
Hallo,
hier ein Ansatz:
Code:
Sub F_en()
Dim Shl As Object: Set Shl = CreateObject("Shell.Application")
f = Dir(Environ("tmp") & "\*.zip")
nf = Environ("tmp") & "\" & f
' einen Unterordner aus einer zip-Datei heraus zu kopieren
Shl.Namespace(Environ("tmp")).MoveHere Shl.Namespace(nf).Items.Item("xl")
'einen Unterordner in ein bestehendes zip-file hinein zu kopieren
Shl.Namespace(nf).MoveHere Environ("tmp") & "\xl"
Set Shl = Nothing
End Sub
Manchmal wird trotz "Move" nur kopiert, falls der Ordner dann gelöscht werden muss, geht es ohne alle Dateien zu löschen mit "Shell "cmd /c rmdir /s /q " & xl"
Es ist immer etwas "trickig", vermutlich wird es nicht beim ersten Mal klappen.
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Terades
Registriert seit: 30.08.2014
Version(en): Office 365 - Beta 32 Bit
Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:1 Nutzer sagt Danke an Case für diesen Beitrag 28
• Terades
Registriert seit: 27.12.2018
Version(en): 2003,2010
Hallo,
die Ideen die mir spontan durch den Kopf gehen sind:
1. Dein Code (Schleife zur Ermittlung der Dateien) liefert keine Unterverzeichnisse, daher können die auch nicht gezippt werden.
2. Eigentlich ist das doch nur eine Parametrisierungsfrage von 7-Zip. Ich frage mich was dabei herauskommt,
- wenn man die Schleife weglässt
- bei dem Shell Befehl hinten statt "sDatei" einfach "sPath" setzt.
Das müsste eigentlich gehen.
Natürlich sind Fenneks und Rons Ansatz auch korrekt, aber eigentlich war die Lösung doch garnicht so weit entfernt.
Registriert seit: 06.12.2015
Version(en): 2016
Hallo,
da das Thema nicht so ganz alltäglich ist, könnte der Fragesteller den endgültigen Code publizieren?
Danke
mfg
Registriert seit: 27.12.2018
Version(en): 2003,2010
Hallo Fennek,
probier doch einfach mal
Shell "C:\Program Files\7-Zip\7z.exe a " & Zielpfad & zipName & " " & Quellpfad
(Hab hier kein 7z, sonst würd ich's selber tun)
vg, MM
Registriert seit: 30.08.2014
Version(en): Office 365 - Beta 32 Bit
Hallo, :19:
Ordner mit allen Dateien und Unterordner mit
7Zip packen: :21:
Code:
C:\Temp\7Zip\Neu\7za.exe a -r C:\Temp\Zieldatei.zip C:\Temp\Co/* C:\Temp\Com/*
Ich arbeite mit der
Konsolenanwendung "
7za.exe".
Keine Installation notwendig. Download hier:
Download...
Die
Schreibweise ist
wichtig. Einfach vorher im DOS-Fenster
testen. Was da läuft geht dann auch per
Shell.
a = Archiv anlegen und alle Dateien und Ordner/Unterordner hinzufügen
-r = Inhalte aller Ordner rekursiv nehmen
Nicht *.* schreiben - das hat in 7Zip eine
andere Bedeutung wie in DOS (
Schreibweise siehe oben).
Leerzeichen in Ordnernamen vermeiden, oder eben maskieren.
________
Servus
Case