Alle Zip dateien einer Verzeichnisses entpacken (mit Borardmitteln)
Hallo, ich möchte alle Zip Dateien eines Verzecihnisses mit Windows Bordmitteln entpacken
dazu hatte BASLA einen Code für eine einzelne Datei
lasse ich die Endung weg entpackt er leider immer noch nicht alle Dateien eines Verzeichnisses.
Wo muss hier ien Loop oder ähnl. eingebunden werden?
dazu hatte BASLA einen Code für eine einzelne Datei
@echo off & setlocal
set "Quelle=D:\Ein.zip"
set "Ziel=D:\Entpackt"
if not exist "%Ziel%\" md "%Ziel%" 2>nul||echo Zielordner "%Ziel%" konnte nicht erstellt werden! & goto :eof
set "U=%temp%\Unzip.vbs"
>"%U%" echo CreateObject("Shell.Application").Namespace("%Ziel%").CopyHere CreateObject("Shell.Application").Namespace("%Quelle%").Items, 4 + 16
cscript //nologo "%U%"
lasse ich die Endung weg entpackt er leider immer noch nicht alle Dateien eines Verzeichnisses.
Wo muss hier ien Loop oder ähnl. eingebunden werden?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 205732
Url: https://administrator.de/contentid/205732
Ausgedruckt am: 15.11.2024 um 01:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
kann hier der Fehler Liegen?
Sollte das nicht *.zip sein um alle gepackten Dateien zu entpacken?
Ich meine ich kann keinen Code schreiben aber wäre das eventuell eine Möglichkeit?
Gruß
Dobby
kann hier der Fehler Liegen?
set "Quelle=D:\Ein.zip"
Sollte das nicht *.zip sein um alle gepackten Dateien zu entpacken?
Ich meine ich kann keinen Code schreiben aber wäre das eventuell eine Möglichkeit?
Gruß
Dobby
Hallo thomas1972 und D.o.b.b.y!
Der Code war ja tatsächlich nur für eine Datei gedacht - daher etwa so:
Grüße
bastla
Der Code war ja tatsächlich nur für eine Datei gedacht - daher etwa so:
@echo off & setlocal
set "Quelle=D:\" & REM Quellordner mit abschließendem "\" schreiben
set "Ziel=D:\Entpackt"
if not exist "%Ziel%\" md "%Ziel%" 2>nul||echo Zielordner "%Ziel%" konnte nicht erstellt werden! & goto :eof
set "U=%temp%\Unzip.vbs"
>"%U%" echo CreateObject("Shell.Application").Namespace(WScript.Arguments(1)).CopyHere CreateObject("Shell.Application").Namespace(WScript.Arguments(0)).Items, 4 + 16
for %%i in ("%Quelle%*.zip") do cscript //nologo "%U%" "%%i" "%Ziel%"
bastla
[OT]
Umbennen finde ich auch unmöglich, ist aber im Forum sehr beliebt... *seufz*
Set /a rgc+=1
#883
Grüße
Biber
[/OT}
Umbennen finde ich auch unmöglich, ist aber im Forum sehr beliebt... *seufz*
Set /a rgc+=1
#883
Grüße
Biber
[/OT}
Hallo thomas1972!
Falls es übrigens tasächlich so sein sollte, dass eine .zip-Datei Inhalt einer weiteren .zip-Datei (die aber einen anderen Dateityp hat) ist, sollte es mit dem Umbenennen Letzterer auf .zip und anschließendem Entpacken per Script eigentlichen klappen - und da der entscheidende Teil des Scripts ja jetzt schon per VB(S) erledigt wird, ginge das dann ziemlich sicher auch per VBA ...
Grüße
bastla
Problem habe ich nur ,dass die Dateinamen selber keine entdung ZIP haben
Wollte aber alles in einem VBA Script haben
Welche Informationen wolltest Du dann als nächstes nachliefern? Beschreibe bitte konkret, was Du hast und was Du erreichen willst ...Wollte aber alles in einem VBA Script haben
Falls es übrigens tasächlich so sein sollte, dass eine .zip-Datei Inhalt einer weiteren .zip-Datei (die aber einen anderen Dateityp hat) ist, sollte es mit dem Umbenennen Letzterer auf .zip und anschließendem Entpacken per Script eigentlichen klappen - und da der entscheidende Teil des Scripts ja jetzt schon per VB(S) erledigt wird, ginge das dann ziemlich sicher auch per VBA ...
Grüße
bastla
Hallo nochmal,
Meines Erachtens nimmst Du einfach was @bastla Dir geschrieben hat und macht nur einen Schritt in
der Ausführung mehr und das war es dann auch schon.
Also alle Dateien *.zip im Ordner 1 entpacken nach Ordner 2
und dann im zweiten Schritt
Alle Dateien *.zip in dem Ordner 2 entpacken nach Ordner 3
So dann hast Du alles entpackt ob das nun doppelt oder dreifach ist ist ja eigentlich egal man kann den
Schritt ja beliebig erweitern, aber eine Protokolldatei mit dem aktuellen Datum als Namen würde ich mir
an Deiner Stelle immer zusätzlich schreiben lassen in einen Ordner der Protokoll heißt und dann
wenn alle Deine Dekompressionen abgeschlossen sind würde ich ein zweites Script starten lassen was Dir
die Protokolldatei durchsucht und eventuelle Fehler oder den glatten Vollzug meldet und sich immer
am neuesten Datum orientiert.
Gruß
Dobby
Problem habe ich nur ,dass die Dateinamen selber keine entdung ZIP haben
Wieso soll dann der Code eine Datei ansprechen die auf .zip endet?Meines Erachtens nimmst Du einfach was @bastla Dir geschrieben hat und macht nur einen Schritt in
der Ausführung mehr und das war es dann auch schon.
Also alle Dateien *.zip im Ordner 1 entpacken nach Ordner 2
und dann im zweiten Schritt
Alle Dateien *.zip in dem Ordner 2 entpacken nach Ordner 3
So dann hast Du alles entpackt ob das nun doppelt oder dreifach ist ist ja eigentlich egal man kann den
Schritt ja beliebig erweitern, aber eine Protokolldatei mit dem aktuellen Datum als Namen würde ich mir
an Deiner Stelle immer zusätzlich schreiben lassen in einen Ordner der Protokoll heißt und dann
wenn alle Deine Dekompressionen abgeschlossen sind würde ich ein zweites Script starten lassen was Dir
die Protokolldatei durchsucht und eventuelle Fehler oder den glatten Vollzug meldet und sich immer
am neuesten Datum orientiert.
Gruß
Dobby
Zitat von @thomas1972:
Besteht die Möglichkeit dieses eigentlich auch in VBA ähnlich umzusetzen?.
Problem habe ich nur ,dass die Dateinamen selber keine entdung ZIP haben (umbennen nicht möglich, da die Dateien doppelt
gepackt sind und windows dann die dateie nicht mehr richtig erkennt, doppelzip wird aufgehoben und es wird nur eine Datei
angezeigt)
Im Moment habe ich mit mit 7za per Batch beholfen. Wollte aber alles in einem VBA Script haben
Besteht die Möglichkeit dieses eigentlich auch in VBA ähnlich umzusetzen?.
Problem habe ich nur ,dass die Dateinamen selber keine entdung ZIP haben (umbennen nicht möglich, da die Dateien doppelt
gepackt sind und windows dann die dateie nicht mehr richtig erkennt, doppelzip wird aufgehoben und es wird nur eine Datei
angezeigt)
Im Moment habe ich mit mit 7za per Batch beholfen. Wollte aber alles in einem VBA Script haben
Hallo Thomas,
folgender VBA-Code sollte Dir bei deinem Vorhaben weiterhelfen. Er entpackt in einem weiteren Schritt alle im ersten ZIP enthaltenen weiteren ZIP-Dateien.
Die Variablen lassen sich oben im Script anpassen.
'========Variablen für Anpassung =======
'Ordner in dem die Dateien liegen
STARTFOLDER = "C:\temp\zip"
'Entpackordner
TARGETFOLDER = "C:\temp\unzip"
'Erweiterung der Dateien
FILETYPE = "zip"
'Auch Dateien in Unterordnern bearbeiten
RECURSION = False
'=======================================
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set shell = CreateObject("Shell.Application")
Set WshShell = WScript.CreateObject("Wscript.Shell")
TEMPFOLDER = wshshell.ExpandEnvironmentStrings("%temp%") & "\ZipInZip"
If Not fso.FolderExists(TEMPFOLDER) Then fso.CreateFolder TEMPFOLDER
Set PROCESSFOLDER = fso.GetFolder(STARTFOLDER)
parseFolders PROCESSFOLDER,RECURSION
Function parseFolders(strFldr,boolRecursion)
For each file in strFldr.Files
If LCase(Right(file.Name,3)) = LCase(FILETYPE) Then
Set zipfileitems = shell.NameSpace(file.Path).Items
For Each f In zipfileitems
If LCase(Right(f.Name,3)) = "zip" Then
shell.NameSpace(TEMPFOLDER).CopyHere f, 4+16
shell.NameSpace(TARGETFOLDER).CopyHere shell.NameSpace(TEMPFOLDER & "\" & f.Name).Items , 4+16
fso.DeleteFile TEMPFOLDER & "\" & f.Name
Else
shell.NameSpace(TARGETFOLDER).CopyHere f, 4+16
End If
Next
End If
Next
If boolRecursion Then
For Each subFolder in strFldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Set fso = Nothing
Set shell = Nothing
Set wshshell = Nothing
Grüße Uwe
Hallo Thomas,
Das sollte passen ...
Grüße Uwe
Das sollte passen ...
'========Variablen für Anpassung =======
'Ordner in dem die Dateien liegen
STARTFOLDER = "C:\Temp\zip"
'Entpackordner
TARGETFOLDER = "C:\Temp\zip"
'Erweiterung der Dateien
FILETYPE = "zip"
'Quellzip löschen
DELETESRC = True
'Auch Dateien in Unterordnern bearbeiten
RECURSION = False
'=======================================
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set shell = CreateObject("Shell.Application")
Set WshShell = WScript.CreateObject("Wscript.Shell")
TEMPFOLDER = wshshell.ExpandEnvironmentStrings("%temp%") & "\ZipContents"
If Not fso.FolderExists(TEMPFOLDER) Then fso.CreateFolder TEMPFOLDER
Set PROCESSFOLDER = fso.GetFolder(STARTFOLDER)
parseFolders PROCESSFOLDER,RECURSION
Function parseFolders(strFldr,boolRecursion)
counter = 0
Set oDic = CreateObject("Scripting.dictionary")
For Each file In strFldr.Files
If LCase(Right(file.Name,3)) = LCase(FILETYPE) Then
Set zipfileitems = shell.NameSpace(file.Path).Items
For Each f In zipfileitems
If LCase(Right(f.Name,3)) = "zip" Then
shell.NameSpace(TEMPFOLDER).CopyHere f, 4+16
shell.NameSpace(TARGETFOLDER).CopyHere shell.NameSpace(TEMPFOLDER & "\" & f.Name).Items , 4+16
fso.DeleteFile TEMPFOLDER & "\" & f.Name
Else
shell.NameSpace(TARGETFOLDER).CopyHere f, 4+16
End If
Next
counter = counter + 1
oDic.Add counter, file.Path
End If
Next
If DELETESRC = True Then
colKeys = oDic.Keys
For Each strKey in colKeys
fso.DeleteFile oDic.Item(strKey)
Next
End If
If boolRecursion Then
For Each subFolder in strFldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Set fso = Nothing
Set shell = Nothing
Set wshshell = Nothing
Grüße Uwe