fixi637
Goto Top

Per Batch Dateien aus mehreren Ordnern packen

Hallo miteinander

Ich habe schon etwas im Internet rumgestöbert, aber leider noch nicht wirklich was brauchbares gefunden.

Mein Problem ist folgendes:

Ich möchte den Inhalt von ca. 5000 Ordnern packen (für jeden Ordner ein Archiv) und dann die Daten aus dem Ordner löschen.
Das Ganze möchte ich gerne mit Hilfe einer Batch Datei und 7zip umsetzen. Die Namen für die jeweiligen Archive soll sich auf den Ordnernamen beziehen. Also zu dem Ordner "Test" soll dann das dazugehörige Archiv den Namen "Test" haben.

Gibt es die Möglichkeit so etwas umzusetzen und kann mir hier vielleicht jemand weiterhelfen? Ich steh irgendwie total auf dem Schlauch und hab auch noch nicht so die große Erfahrung damit.


Grüße

Fixi

Content-Key: 145485

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

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

Mitglied: 77559
77559 Jun 23, 2010 at 11:57:16 (UTC)
Goto Top
Hallo Fixi,

ich sehe da kein Problem,
  • wie sieht die Ordnerstruktur aus?
  • gibt es Unterordner?
  • soll im Archiv der Ordner (relativ/absolut) enthalten sein?

Für den Anfang könnte dies reichen ( in einem CMD Fenster)
for /F "delims=" %A in ('Dir /B/AD *') Do 7z.exe a -r -tzip %A %A\* && RD /S /Q %A  
In einer Batch-Datei wären die %-Zeichen zu verdoppeln.

Gruß
LotPings

Edit: Das 2009 war von einem Test übrig geblieben, entfernt

In Anlehnung an Bastlas Batch hier eine Batch Variante
@Echo off&SetLocal
Set "SevenZ=C:\Programme\7-zip\7z.exe"  
Pushd "C:\Hauptordner"  
for /F "delims=" %%A in ('Dir /B/AD *') Do %SevenZ% a -r -tzip %%A %%A\* && RD /S /Q %%A  
Popd
Unterschiedlich ist :
  • anderer Archivtyp (zip) und
  • der Unterordner ist im Archiv enthalten

Gruß
Lotpings
Member: bastla
bastla Jun 23, 2010 at 12:04:34 (UTC)
Goto Top
Hallo Fixi637 und willkommen im Forum!

Soferne alle Ordner auf der selben Ebene liegen, könnte das etwa so gehen:
@echo off & setlocal
set "Basis=D:\Alle Ordner sind hier drin"  
set "Ziel=D:\Da sollen die gepackten Dateien hin"  
set "7z=C:\Programme\7-zip\7z.exe"  

for /d %%i in ("%Basis%\*.*") do (  
    pushd "%%i"  
    "%7z%" a -r "%Ziel%\%%~nxi.7z" *.* && echo del /s /q /a /f *.*  
    popd
)
Anmerkungen:
  • Die Zeile 2 bis 4 sind an Deine Gegenheiten anzupassen.
  • Wegen des "echo" vor dem "del" wird das Löschen der Dateien nur simuliert (um Ernst zu machen, das "echo" einfach entfernen).
  • Es werden (lt Vorgabe) alle Dateien, aber keine Ordner gelöscht.
  • Da von mir ungetestet, solltest Du den Batch nicht gleich auf alle 5000 Ordner loslassen, sondern zunächst nur einen Testordner mit 2 oder 3 Unterordnern benutzen ...

Grüße
bastla

[Edit] Hallo LotPings! Wieder einmal auf der Überholspur unterwegs ... face-wink
Member: Fixi637
Fixi637 Jun 23, 2010 at 12:11:04 (UTC)
Goto Top
Hi LotPings

Danke für deine Antwort.

Die Ordnerstruktur sieht folgendermaßen aus:

Hauptordner
- Unterordner1
- Unterordner2
- Unterordner3
- Unterordner4
usw.

Ich möchte halt, dass er nur die Dateien, die sich in den Unterordnern befindet packt und dann die gezippte Datei mit dem Namen des Ordners benennt. Also die Dateien aus dem "Unterordner1" sollen gepackt werden in das Archiv "Unterordner1". Das Archiv soll sich dann wiederrum in dem "Hauptordner" befinden. Danach soll er noch den "Unterordner1" löschen und dann zum nächsten Ordner weitergehen.


Grüße

Fixi
Member: Fixi637
Fixi637 Jun 23, 2010 at 12:30:57 (UTC)
Goto Top
Hallo bastla

Ich habe das soweit mal angepasst. Da kommt aber eine Fehlermeldung:

Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters ist ungültig: %~nxi.7z" *.* && del /s /q /a /f *.*

Hab ich da irgendwas falsch gemacht?


Grüße
Fixi
Member: bastla
bastla Jun 23, 2010 at 12:50:15 (UTC)
Goto Top
Hallo Fixi637!
Hab ich da irgendwas falsch gemacht?
Leider nein - das hab' ich selbst verbockt ... face-sad

Unter Berücksichtigung Deiner Antwort an LotPings wäre ohnehin eine Anpassung erforderlich gewesen:
@echo off & setlocal
set "Basis=D:\Alle Ordner sind hier drin"  
set "Ziel=%Basis%"  
set "Prog=C:\Programme\7-zip\7z.exe"  

for /d %%i in ("%Basis%\*.*") do (  
    "%Prog%" a -r "%Ziel%\%%~nxi.7z" "%%i\*.*" && echo rd /s /q "%%i"  
)
Die ".7z"-Dateien (wenn es ".zip" werden sollen, wie von LotPings schon verwendet: -tzip nach dem "-r") werden jetzt im Ausgangsordner erstellt und die gepackten Ordner (nicht nur die darin enthaltenen Dateien) gelöscht - damit besteht eigentlich nur mehr ein Unterschied zum ersten Ansatz von LotPings: Die Batchdatei muss nicht im Ausgangsordner liegen ...

Grüße
bastla
Mitglied: 77559
77559 Jun 23, 2010 at 13:01:30 (UTC)
Goto Top
Zitat von @bastla:
Hallo Fixi637!
> Hab ich da irgendwas falsch gemacht?
Leider nein - das hab' ich selbst verbockt ... face-sad
Die Begründung was falsch war ist aber durchaus interessant:
Die Shell interprtiert in der Schleife das %7 von "%7z%" als Kommandozeilenargument 7
Der Grund warum Variablennamen nicht mit Ziffern beginnen sollten.
(Ich habe aber auch erst probieren müssen bevor ich darauf kam...)

Gruß
LotPings
Member: Fixi637
Fixi637 Jun 23, 2010 at 13:25:08 (UTC)
Goto Top
Hallo

Jetzt hats gepasst und es klappt auch wunderbar. Danke euch beiden für die schnelle Hilfe.


Grüße

Fixi
Member: Fixi637
Fixi637 Jun 30, 2010 at 08:23:49 (UTC)
Goto Top
Hallo,

ich bräuchte bei diesem Thema noch einmal eine kleine Hilfe.
Und zwar mächte ich diesen Schritt auch wieder Rückgängig machen können.
Also möchte ich jetzt die Dateien, die sich in der zip Datei "ordner1.zip" befinden in der Ordner "ordner1" entpacken.
Es sollen also die zip Dateien entpackt werden und in einem Ordner gespeichert werden, der wie die zip Datei heißt. Danach soll die zip Datei gelöscht werden. Kann man das irgendwie umsetzen?

Danke schonmal für eure Hilfe.


Grüße
Fixi
Mitglied: 77559
77559 Jun 30, 2010 at 09:46:22 (UTC)
Goto Top
Zitat von @Fixi637:
Es sollen also die zip Dateien entpackt werden und in einem Ordner gespeichert werden, der wie die zip Datei heißt.
Danach soll die zip Datei gelöscht werden. Kann man das irgendwie umsetzen?

Hallo Fixi,
hängt davon ab welche Variante du benutzt, Bastlas oder meine.

Bei meiner Batch ist der Ordnername mit im Archiv abgespeichert.

Auf der Kommandozeile in deinem Hauptordner reduziert sich das auf:
c:\Programme\7-zip\7z.exe x Ordner1.zip && Echo Del Ordner1.zip
hier wieder mit dem "entschärften" Del.

Um alle im aktuellen Ordner befindlichen Zips hier zu entpacken:
For %A in (*.zip) Do @c:\Programme\7-zip\7z.exe x "%A" && Echo Del "%A"

Bei Bastlas Version müsste man als Zielverzeichnis den Ordner noch angeben, ggfs erst erzeugen.

Gruß
LotPings
Member: Fixi637
Fixi637 Jun 30, 2010 at 12:54:30 (UTC)
Goto Top
Hallo LotPings,

danke für deine Antwort. Hab das mittlerweile durch probieren auch rausgefunden. Anfangs habe ich einfach zu kompliziert gedacht, bzw. mir war nicht klar, dass man das so einfach umsetzen kann. Habe das einfach nur mit folgender Zeile gemacht.

c:\programme\7-zip\7z.exe x *.zip -o* && del *.zip


Gruß
Felix
Mitglied: 77559
77559 Jun 30, 2010 at 13:03:24 (UTC)
Goto Top
Zitat von @Fixi637:
Anfangs habe ich einfach zu klompleziert gedacht,
Interessante Wortschöpfung face-wink

Ansonsten schön, wenn es klappt.

Gruß
LotPings