Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Batch Dateien aus mehreren Ordnern packen

Frage Entwicklung Batch & Shell

Mitglied: Fixi637

Fixi637 (Level 1) - Jetzt verbinden

23.06.2010, aktualisiert 30.06.2010, 7779 Aufrufe, 11 Kommentare

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
Mitglied: LotPings
23.06.2010 um 13:57 Uhr
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)
01.
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
01.
@Echo off&SetLocal 
02.
Set "SevenZ=C:\Programme\7-zip\7z.exe" 
03.
Pushd "C:\Hauptordner" 
04.
for /F "delims=" %%A in ('Dir /B/AD *') Do %SevenZ% a -r -tzip %%A %%A\* && RD /S /Q %%A 
05.
Popd
Unterschiedlich ist :
  • anderer Archivtyp (zip) und
  • der Unterordner ist im Archiv enthalten

Gruß
Lotpings
Bitte warten ..
Mitglied: bastla
23.06.2010 um 14:04 Uhr
Hallo Fixi637 und willkommen im Forum!

Soferne alle Ordner auf der selben Ebene liegen, könnte das etwa so gehen:
01.
@echo off & setlocal 
02.
set "Basis=D:\Alle Ordner sind hier drin" 
03.
set "Ziel=D:\Da sollen die gepackten Dateien hin" 
04.
set "7z=C:\Programme\7-zip\7z.exe" 
05.
 
06.
for /d %%i in ("%Basis%\*.*") do ( 
07.
    pushd "%%i" 
08.
    "%7z%" a -r "%Ziel%\%%~nxi.7z" *.* && echo del /s /q /a /f *.* 
09.
    popd 
10.
)
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 ...
Bitte warten ..
Mitglied: Fixi637
23.06.2010 um 14:11 Uhr
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
Bitte warten ..
Mitglied: Fixi637
23.06.2010 um 14:30 Uhr
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
Bitte warten ..
Mitglied: bastla
23.06.2010 um 14:50 Uhr
Hallo Fixi637!
Hab ich da irgendwas falsch gemacht?
Leider nein - das hab' ich selbst verbockt ...

Unter Berücksichtigung Deiner Antwort an LotPings wäre ohnehin eine Anpassung erforderlich gewesen:
01.
@echo off & setlocal 
02.
set "Basis=D:\Alle Ordner sind hier drin" 
03.
set "Ziel=%Basis%" 
04.
set "Prog=C:\Programme\7-zip\7z.exe" 
05.
 
06.
for /d %%i in ("%Basis%\*.*") do ( 
07.
    "%Prog%" a -r "%Ziel%\%%~nxi.7z" "%%i\*.*" && echo rd /s /q "%%i" 
08.
)
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
Bitte warten ..
Mitglied: LotPings
23.06.2010 um 15:01 Uhr
Zitat von bastla:
Hallo Fixi637!
> Hab ich da irgendwas falsch gemacht?
Leider nein - das hab' ich selbst verbockt ...
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
Bitte warten ..
Mitglied: Fixi637
23.06.2010 um 15:25 Uhr
Hallo

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


Grüße

Fixi
Bitte warten ..
Mitglied: Fixi637
30.06.2010 um 10:23 Uhr
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
Bitte warten ..
Mitglied: LotPings
30.06.2010 um 11:46 Uhr
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
Bitte warten ..
Mitglied: Fixi637
30.06.2010 um 14:54 Uhr
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
Bitte warten ..
Mitglied: LotPings
30.06.2010 um 15:03 Uhr
Zitat von Fixi637:
Anfangs habe ich einfach zu klompleziert gedacht,
Interessante Wortschöpfung

Ansonsten schön, wenn es klappt.

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell: Dateien nach Version löschen in mehreren Ordnern (4)

Frage von ImmerKind zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...