7zip Kommandozeile: viele Dateien entpacken

Tenchi Muyo

Captain
Registriert
Apr. 2006
Beiträge
3.414
Hallo,

Ich habe auf c: einen Ordner der wiederum Datumsordner enthält in diesen befinden sich zip Dateien die entpackt werden sollen.

Mein Anliegen :

Ich möchte das wenn er die Archive entpackt in diesem Datumsordner einen Unterordner erstellt (so wie das Archiv heißt).
Problem er entpackt alle Dateien ins Oberverzeichnis c:\ordner1\

Und nicht im Datumsordner (Ordner2)

Er soll wie gesagt in diesem Ordner2 wo sich die ZIP befindet einen Unterordner mit dem Namen der Datei erstellen.

Habt ihr eine Idee ? Danke!

(Leider handelt es sich auch um eine sehr alte 7zip Anwendung v9.20)

Es sind auch hunderte Ordner die ich sonst manuell angehen müsste daher sollte es per kommandozeilen befehlt funktionieren. ^^
 
Zuletzt bearbeitet:
einfach eine kleine Batch-Datei verwenden ...
Code:
@echo off
Setlocal EnableDelayedExpansion

set Hauptverzeichnis=c:\Ordner1
set ArchivEndung=.zip
set zipPath=c:\Tools\7-Zip\7z.exe

:: Schleife ueber alle Verzeichnisse unterhalb des Hauptverzeichnisses
FOR /f "tokens=*" %%i in ('DIR %Hauptverzeichnis% /a:d /b') DO (

  :: kompletter Pfad des Datumsverzeichnisses
  set pathName=%%~fi

  :: Filter auf Archive mit gewuenschter Endung
  set filter=!pathName!\*%ArchivEndung%

  :: alle Archive im Verzeichnis !pathName! durchlaufen
  FOR /f "tokens=*" %%a in ('DIR "!filter!" /a:-d /b') DO (
    :: Archivname ohne Endung = Verzeichnis zum Entpacken
    set extractPath=!pathName!\%%~na
   
    :: vollstaendiger Pfad des Archivs
    set archiveFullPath=!pathName!\%%~na%ArchivEndung%
   
    :: Aufruf von 7zip
    echo "%zipPath%" e "!archiveFullPath!" -o"!extractPath!"
  )

)
 
Endlocal

Die Pfade an die von Deinem Rechner anpassen und das Echo vor dem 7zip-Aufruf entfernen. Mit 7zip Version 18.05 funktioniert es.
 
  • Gefällt mir
Reaktionen: Tenchi Muyo
Andreas Hammer!

Hat funktioniert auch mit der alten Version.

Jetzt hab ich noch ein weiteres Problem:

In der Ordner Ebene 3 wurden die entpackten Dateien entpackt.

Diese sind ebenfalls *.zip Dateien und müssten ebenfalls entpackt werden... ^^
 
Ok, hier eine kleine Anpassung ...
Code:
@echo off
Setlocal EnableDelayedExpansion

set Hauptverzeichnis=c:\Ordner1
set ArchivEndung=.zip
set zipPath=C:\Tools\7-Zip\7z.exe

:: Schleife ueber alle Verzeichnisse unterhalb des Hauptverzeichnisses
FOR /f "tokens=*" %%i in ('DIR %Hauptverzeichnis% /a:d /b') DO (

  :: kompletter Pfad des Datumsverzeichnisses
  set pathO2=%%~fi

  :: Filter auf Archive mit gewuenschter Endung
  set filter2=!pathO2!\*%ArchivEndung%

  :: alle Archive im Ordner Ebene 2 durchlaufen
  FOR /f "tokens=*" %%a in ('DIR "!filter2!" /a:-d /b') DO (
    :: Archivname ohne Endung = Verzeichnis zum Entpacken
    set extractPath=!pathO2!\%%~na
    
    :: vollstaendiger Pfad des Archivs
    set archiveFullPath=!pathO2!\%%~na%ArchivEndung%
    
    :: Aufruf von 7zip
    echo "%zipPath%" e "!archiveFullPath!" -o"!extractPath!"
  )
 
  :: Verzeichnisse unterhalb des Ordners Ebene 2 durchlaufen
  FOR /f "tokens=*" %%u in ('DIR !pathO2! /a:d /b') DO (
    :: kompletter Pfad Ordner Ebene 3
    set pathO3=!pathO2!\%%~nu

    :: Filter auf Archive mit gewuenschter Endung
    set filter3=!pathO3!\*%ArchivEndung%

    :: alle Archive im Ordner Ebene 3 durchlaufen
    FOR /f "tokens=*" %%b in ('DIR "!filter3!" /a:-d /b') DO (
      :: Archivname ohne Endung = Verzeichnis zum Entpacken
      set extractPath=!pathO3!\%%~nb

      :: vollstaendiger Pfad des Archivs
      set archiveFullPath=!pathO3!\%%~nb%ArchivEndung%

      :: Aufruf von 7zip
      echo "%zipPath%" e "!archiveFullPath!" -o"!extractPath!"
 
    )
    
  )
 
)
  
Endlocal
 
  • Gefällt mir
Reaktionen: Tenchi Muyo
Und das ganze als PowerShell Einzeiler:
PowerShell:
Get-ChildItem -Recurse "c:\Ordner1\*.zip" | ForEach-Object { 7z e $_ -o"$($_.Directory)\$($_.BaseName)" }
 
Das ginge auch als Batch-Datei rekursiv mit einem Einzeiler, bleibt die Frage, ob es gewollt ist, bis ins letzte Unterverzeichnis alles nach demselben Schema zu entpacken.

Wie verhält sich Get-ChildItem bei Unterverzeichnissen, die erst während der Rekursion neu angelegt werden? Das war bei der Batch-Version ein weiterer Grund, es nicht rekursiv zu machen. Verhält sich Get-ChildItem da anders als der DIR-Befehl?
 
@Andreas_ guter Einwand! Gerade mal ausprobiert. Get-ChildItem beruecksichtigt die neu entpacken Dateien nicht. Erst bei erneutem ausfuehren des Befehls werden diese entpackt.
 
@Andreas_

Tausend dank! Die 2te Batchdatei hat auch funktioniert! :daumen:

Hätte nicht gedacht, dass man so einen Aufwand dafür betreiben muss.
 
Zuletzt bearbeitet:
Zurück
Oben