kamelle
Goto Top

Ca. 600.000 Archive in komplexer Ordnerstruktur entpacken

Ich habe ca 600.000 .zip Archive in einer komplexen Ordnerstruktur zu entpacken. Die Ordnerstruktur soll erhalten bleiben.
Ich habe schon diverse Anläufe in CMD mit 7-zip und WinRar oder als Batch probiert, aber nichts geht.

Die meisten Unzipper sind darauf ausgelegt, dass ich die Archive markiere, um sie dann zu entpacken. Das ist bei der Menge an Archiven aber schier unmöglich. Auch beim globalen Suchen um sie dann zu markieren und in einen Ordner zu entpacken, kommt mein Ryzen 7700 Rechner an seine Grenzen. Außerdem verliere ich so meine Ordnerstruktur.
Auch Powershell wills nicht machen

Hat jemand einen rekursiven Batch für cmd, 7-zip, WinRar oder Powershell, mit dem ich das Problem lösen kann?

Content-ID: 670186

Url: https://administrator.de/forum/ca-600-000-archive-in-komplexer-ordnerstruktur-entpacken-670186.html

Ausgedruckt am: 23.01.2025 um 21:01 Uhr

gastric
gastric 14.12.2024, aktualisiert am 16.12.2024 um 17:07:46 Uhr
Goto Top
Hi.
Alle ZIPs n einen einzigen Ordner, oder jedes in ein separates, oder jeweils im gleichen Verzeichnis der ZIP-Datei entpacken?

Alle in einen einzigen zentralen Ordner entpacken
$quelle = "d:\daten"  
$ziel = "d:\extrahiert"  
foreach($file in Get-ChildItem $quelle -File -Filter *.zip -Recurse){
    Expand-Archive -LiteralPath $file.Fullname -DestinationPath $ziel -Force
}

Alle im jeweiligen Ordner der ZIP Datei entpacken
$quelle = "d:\daten"  
foreach($file in Get-ChildItem $quelle -File -Filter *.zip -Recurse){
    Expand-Archive -LiteralPath $file.Fullname -DestinationPath $file.DirectoryName -Force
}

WinRar & Co machen es aber auch out of the box bspw. rekursiv für alle ZIPs mit einem einzigen Befehl

Alle ZIPs in einen gemeinsamen Ordner
winrar x -r d:\daten\*.zip d:\ziel\

usw.

Gruß gastric
DivideByZero
DivideByZero 14.12.2024 um 18:57:22 Uhr
Goto Top
Moin,

oben hast Du die Lösung in Powershell, aber natürlich geht das auch mit jedem guten Archiver anders über die Kommandozeile. Winrar, 7zip arbeiten da einwandfrei. Da muss nichts markiert werden. Das, was Du schilderst, scheint über die GUI getestet zu sein, das macht natürlich bei der Masse keinen Sinn.

Lösungsweg generisch: rekursive Suche der Archive, auf das Archiv dann den Entpackbefehl anwenden. Also das, was Du perfekt serviert bekommen hast oben in Powershell.

Gruß

DivideByZero
Kamelle
Kamelle 14.12.2024 aktualisiert um 19:30:48 Uhr
Goto Top
Die Powershell Lösung endet ohne das was getan wurde.

Hab die rar Lösung gestartet, mal sehen was passiert.
gastric
gastric 14.12.2024 aktualisiert um 21:45:39 Uhr
Goto Top
Zitat von @Kamelle:

Die Powershell Lösung endet ohne das was getan wurde.
Kann ich nicht bestätigen, klappt hier einwandfrei ! Hast wohl die ExecutionPolicy oder den Dateifilter im Skript nicht an deine Umgebung angepasst
Kamelle
Kamelle 14.12.2024 aktualisiert um 21:58:35 Uhr
Goto Top
Dir rar Lösung klappt auch nicht.
Meldung: .zip ist kein rar Archiv.

Bei der powershell Lösung habe ich das auf meinen Ordner geändert:
$quelle = "E:\Disk-E"    
foreach($file in Get-ChildItem $quelle -File -Filter *.zip -Recurse){ Expand-Archive -Path $file.Fullname -DestinationPath $file.DirectoryName -Force
}
prinzjulius
Lösung prinzjulius 14.12.2024, aktualisiert am 16.12.2024 um 11:54:45 Uhr
Goto Top
Guten Abend,
ich hatte mal ein ähnliches Problem, wenn auch bei weitem nicht so umfangreich. Dazu hatte ich ein PowerShell-Script zusammengebaut, dass mithilfe von 7z rekursiv durch alle Verzeichnisse iteriert und alle ".zip"-Dateien an exakt dem Pfad entpackt.

Im "Oberverzeichnis" wird zusätzlich ein Log angelegt.

AKTUALISIERT:
<#

.SYNOPSIS
    Entpackt alle .zip-Dateien in einem Verzeichnis und dessen Unterverzeichnissen mithilfe von 7-Zip
    und protokolliert den Vorgang in einer Logdatei.

.DESCRIPTION
    Dieses Script durchsucht ein angegebenes Verzeichnis und alle Unterverzeichnisse nach .zip-Dateien.
    Jede gefundene .zip-Datei wird mit 7-Zip in das gleiche Verzeichnis entpackt. Erfolgreiche oder fehlerhafte
    Entpackungen werden in einer Logdatei protokolliert.

.NOTES
    Version:    2024-12-14
    Autor:      Julius Prinz

.PARAMETER RootPath
    Das Verzeichnis, das nach .zip-Dateien durchsucht werden soll.

.PARAMETER SevenZipPath
    Der vollständige Pfad zur ausführbaren 7z.exe-Datei.

#>

<# Parameter #>
param(
    [Parameter(Mandatory = $true)]
    [string]$RootPath,

    [Parameter(Mandatory = $false)]
[string]$SevenZipPath = "$($env:ProgramFiles)\7-Zip\7z.exe"  
)

<# Variablen #>
# Überprüfen, ob der Pfad zu 7z.exe korrekt ist
if (-not (Test-Path -Path $SevenZipPath)) {
    Write-Error "Die angegebene 7z.exe konnte nicht gefunden werden: $SevenZipPath"  
    return
}

# Überprüfen, ob das Quellverzeichnis existiert
if (-not (Test-Path -Path $RootPath)) {
    Write-Error "Das angegebene Verzeichnis existiert nicht: $RootPath"  
    return
}

# Erstellen des Log-Dateinamens
$LogFileName = (Get-Date -Format "yyMMdd-HHmmss") + ".log"  
$LogFilePath = Join-Path -Path $RootPath -ChildPath $LogFileName

<# Funktionen #>
function Write-Log {
    param (
        [string]$Message
    )
    # Nachricht in die Logdatei schreiben
    Add-Content -Path $LogFilePath -Value $Message
}

function Extract-ZipFile {
    param (
        [string]$ZipFilePath,
        [string]$SevenZipExecutable
    )

    # Zielverzeichnis ist das gleiche wie das der Zip-Datei
    $TargetDirectory = [System.IO.Path]::GetDirectoryName($ZipFilePath)

    # Entpacken der Datei mit 7z.exe
    $process = Start-Process -FilePath $SevenZipExecutable -ArgumentList "x", "`"$ZipFilePath`"", "-o`"$TargetDirectory`"", "-y" -NoNewWindow -PassThru -Wait  

    # Fehlerbehandlung
    if ($process.ExitCode -ne 0) {
        $LogMessage = "FEHLER: $ZipFilePath"  
        Write-Warning "Fehler beim Entpacken der Datei: $ZipFilePath"  
    } else {
        $LogMessage = "ERFOLG: $ZipFilePath"  
        Write-Output "Erfolgreich entpackt: $ZipFilePath"  
    }

    # Lognachricht schreiben
    Write-Log -Message $LogMessage
}

<# Programm #>
# Logdatei initialisieren
Write-Log -Message "Entpackung gestartet: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"  

# Alle .zip-Dateien im Quellverzeichnis und seinen Unterverzeichnissen finden
$ZipFiles = Get-ChildItem -Path $RootPath -Recurse -Filter "*.zip" -File  

if ($ZipFiles.Count -eq 0) {
    $NoFilesMessage = "Keine .zip-Dateien im Verzeichnis gefunden: $RootPath"  
    Write-Log -Message $NoFilesMessage
    Write-Output $NoFilesMessage
    return
}

# Jede gefundene .zip-Datei entpacken
foreach ($ZipFile in $ZipFiles) {
    Write-Output "Entpacken von: $($ZipFile.FullName)"  
    Extract-ZipFile -ZipFilePath $ZipFile.FullName -SevenZipExecutable $SevenZipPath
}

Write-Log -Message "Entpackung beendet: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"  
Write-Output "Alle .zip-Dateien wurden verarbeitet. Logdatei: $LogFilePath"  


<# Signatur #>

Aufruf:

.\New-UnzipJob.ps1 -RootPath "C:\OberstesVerzeichnis"  
prinzjulius
prinzjulius 14.12.2024 um 22:11:00 Uhr
Goto Top
Ich kommen übrigens auf ca. 1 sek pro Testarchiv mit je einer kleinen Textdatei. Das sollten dann etwa 7 volle Tage dauern bei 600.000 Dateien. Ich hoffe du wirst dieses Jahr noch fertig face-wink
Kamelle
Kamelle 14.12.2024 aktualisiert um 22:20:01 Uhr
Goto Top
@gastric: Hab jetzt von RemoteSigned auf Unrestricted umgeswitched.
Deine zweite Lösung in eine .ps1 geschrieben und angepasst.
Dann in Powershell gestartet.

Wieder ohne Maßnahmen geendet.
gastric
gastric 14.12.2024 aktualisiert um 22:25:22 Uhr
Goto Top
Es gibt keine Ausgaben ... Du musst auch den Dateifilter anpassen, wenn die Dinger nicht *.zip als Ending haben.
Klappt hier wie gesagt einwandfrei. Ansonsten sind deine Dateien wohl inkompatible Zips, ohne Fehlermeldungen können wir hier schlecht helfen...
Das sollten dann etwa 7 volle Tage dauern bei 600.000 Dateien. Ich hoffe du wirst dieses Jahr noch fertig face-wink
Dafür gibt's foreach -parallel , bzw. MultiThreading, dann muss nur noch die CPU und die Platte ausreichend schnell sein😉
kreuzberger
kreuzberger 14.12.2024 um 22:37:07 Uhr
Goto Top
@Kamelle

allein schon wegen der großen zahl ist es eine ungewöhnliche aufgäbe.

Wieder ohne Maßnahmen geendet.
kann es sein, dass zumindest einige ZIPs mit Passwort geschützt sind?

Kreuzberger
Kamelle
Kamelle 14.12.2024 aktualisiert um 23:14:07 Uhr
Goto Top
@prinzjulius:
Ich bekomme die Meldung::
Suggestion [3,General]: The command "7z_unzip.ps1" was not found, but does exist in the current location.
PowerShell does not load commands from the current location by default (see ''Get-Help about_Command_Precedence'').

Hab .\ vergessen, endet trotzdem sofort.
Kamelle
Kamelle 14.12.2024 aktualisiert um 22:49:15 Uhr
Goto Top
@gastric: Sind allesamt .zip Archive.
prinzjulius
prinzjulius 14.12.2024 aktualisiert um 23:03:38 Uhr
Goto Top
Zitat von @Kamelle:

@prinzjulius:
Ich bekomme die Meldung::
Suggestion [3,General]: The command "7z_unzip.ps1" was not found, but does exist in the current location.
PowerShell does not load commands from the current location by default (see ''Get-Help about_Command_Precedence'').

Du befindest dich in PowerShell und bist in dem Verzeichnis, wo sich die .ps1 befindet? Dann bitte ".\" vor "7z_unzip.ps1" nicht vergessen.

Sollte dann etwa so aussehen:

PS C:\PS> .\7z_unzip.ps1 -RootPath "C:\PS\test"  
Kamelle
Kamelle 14.12.2024 aktualisiert um 23:24:24 Uhr
Goto Top
Hab eingegeben:

PS E:\PS>  .\7z_unzip.ps1 -RootPath "E:\Disk_E"  

Endet trotzdem sofort ohne Fehlermeldung.
prinzjulius
prinzjulius 14.12.2024 um 23:37:30 Uhr
Goto Top
Zitat von @Kamelle:

Hab eingegeben
.\7z_unzip.ps1 -RootPath "E:\Disk_E"

Endet trotzdem sofort ohne Fehlermeldung.

Das heißt für mich Skript läuft, aber nichts gefunden.

Hast du denn die notwendigen Lese-/Schreib-Rechte? Schon mit erhöhten Rechten ("als Administrator ausführen") versucht?
Liegt unter "E:\Disk_E" eine Logdatei?

Du kannst ja direkt unter "E:\Disk_E" mal eine .zip legen und gucken, ob diese verarbeitet wird.
gastric
gastric 14.12.2024 aktualisiert um 23:42:51 Uhr
Goto Top
Dir rar Lösung klappt auch nicht.
Meldung: .zip ist kein rar Archiv.

Dann hast du statt der winrar.exe die rar.exe genommen die winrar Version kann auch mit ZIPs auf der Kommandozeile umgehen. Auch das klappt hier im Test ohne Probleme.

RTFM darfst auch du gerne
https://documentation.help/WinRAR/HELPCommandLineSyntax.htm

Scheint als laufe bei dir überhaupt nüscht am Wochenende 🤣.

Jute Nacht .
Kamelle
Kamelle 15.12.2024 aktualisiert um 06:47:00 Uhr
Goto Top
Kann es daran liegen, dass auch andere Formate in den Ordnern liegen?

PS oder CMD wurden immer unter einem admin account als Administrator gestartet.
gastric
gastric 15.12.2024 aktualisiert um 08:14:30 Uhr
Goto Top
Zitat von @Kamelle:

Kann es daran liegen, dass auch andere Formate in den Ordnern liegen?
Nein, außer du hast andere Formate mit der Endung zip versehen, dann müsste er aber auch Fehler werfen.
PS oder CMD wurden immer unter einem admin account als Administrator gestartet.
Welche Powershell Version/Skriptumgebung verwendest du genau unter welchem OS?
gastric
gastric 15.12.2024 aktualisiert um 09:10:45 Uhr
Goto Top
Ach ja und hier noch der Beweis, dass es funktioniert, falls du noch zweifelst ...
Online Demoskript
MirkoKR
MirkoKR 15.12.2024 aktualisiert um 11:55:59 Uhr
Goto Top
@Kamelle

... gib doch im Script mal eine Testausgabe in die Console mit ..

... darüber dann die Ausgabe, welches Verzeichnis und ggf. Datei es gerade scannt, bearbeitet ...

... dadurch siehst du, ob sas Script soweit funktioniert ...
MirkoKR
MirkoKR 15.12.2024 aktualisiert um 17:59:00 Uhr
Goto Top
Ich hab da jetzt, weil ich nicht so Powershell-Afin bin, mal ChatGPT gefragt:



1000040588


Habs nicht getestet, und ggf. kannst du die Aufgabe an chatGPT mit deinen exakten Wünschen anpassen ...
Kamelle
Kamelle 15.12.2024 um 16:55:01 Uhr
Goto Top
@MirkoKR:
Ich würde das Script gerne ausprobieren. Könntest du es mir kopierbar zusenden?
aqui
aqui 15.12.2024 aktualisiert um 17:06:58 Uhr
Goto Top
Ich hab da jetzt, weil ich nicht so Powershell-Afin bin, mal ChatGPT gefragt:
Dann solltest du es hier im Forum auch entsprechend der Forenregeln kennzeichnen!! face-sad
Wie gehen wir in Zukunft mit KI-Inhalten um?
aibut
Eigentlich auch sinnfrei AI zu fragen, denn Kollege @gastric hat ja oben ein problemlos laufendes PS Script gepostet was deutlich effizienter ist als der 10mal so lange Kram von der AI! face-sad
DivideByZero
DivideByZero 15.12.2024 um 17:11:34 Uhr
Goto Top
Zitat von @Kamelle:

@MirkoKR:
Ich würde das Script gerne ausprobieren. Könntest du es mir kopierbar zusenden?

Wo ist das Problem? Der prompt steht doch oben, einfach ChatGPT befragen. Wobei natürlich die Anmerkung von aqui voll zutrifft.
Kamelle
Kamelle 15.12.2024 aktualisiert um 17:35:35 Uhr
Goto Top
@prinzjulius:
Script läuft, hat nur eine Fehlermeldung im LOG wegen Datum.

@MirkoKR:
Hab auch mal spasseshalber Chatgpt gefragt. Gibt mir auch ein Script, aber anders aufgebaut. Läuft auch.

# Definiere den Startordner
$startFolder = "E:\Disk_E" # Ändere den Pfad zu deinem "etest" Verzeichnis

  1. Hole alle ZIP-Dateien rekursiv im Startordner
$zipFiles = Get-ChildItem -Path $startFolder -Recurse -Filter "*.zip"

  1. Durchlaufe jede ZIP-Datei und entpacke sie in denselben Ordner
foreach ($zipFile in $zipFiles) {
$destinationFolder = $zipFile.DirectoryName # Zielordner ist der Ordner der ZIP-Datei
Write-Host "Entpacke $($zipFile.FullName) nach $destinationFolder"

  1. Entpacke die ZIP-Datei
Expand-Archive -Path $zipFile.FullName -DestinationPath $destinationFolder -Force
}
MirkoKR
MirkoKR 15.12.2024 um 17:55:35 Uhr
Goto Top
Zitat von @aqui:

Ich hab da jetzt, weil ich nicht so Powershell-Afin bin, mal ChatGPT gefragt:
Dann solltest du es hier im Forum auch entsprechend der Forenregeln kennzeichnen!! face-sad

Ja, prinzipiell hast du Recht!

Aber hier haben wir keinen "verdeckten KI-Beitrag", sondern das Fragen der KI als Thema und ist somit deutlichst gekennzeichnet.

Ich werde bei künftigen Kommentaren dieser Art aber versuchen, die Regel umzusetzen.
Kamelle
Kamelle 15.12.2024 um 20:03:11 Uhr
Goto Top
Mit dem AI Script war dann doch wohl nix.
prinzjulius
prinzjulius 15.12.2024 aktualisiert um 20:18:46 Uhr
Goto Top
Script läuft, hat nur eine Fehlermeldung im LOG wegen Datum.

Stell gerne einmal das LOG rein, dann kann ich das evtl. beseitigen.
Entpackt das Skript denn jetzt auch die Archive, oder bricht es weiterhin ab?
Kamelle
Kamelle 15.12.2024 um 20:37:45 Uhr
Goto Top
Es entpackt 😄, nur ich sehe keinen log file.
prinzjulius
prinzjulius 15.12.2024 um 20:54:00 Uhr
Goto Top
E:\Disk_E

Das sollte unter "E:\Disk_E" liegen und heißt "241215-204901.log" oder so. Also entsprechend der Uhrzeit, wann du das Skript gestartet hast. Sollte dann etwa so aussehen:
Entpackung gestartet: 2024-12-15 20:52:56
FEHLER: C:\PS\test\Set-CryptoSettings.zip
ERFOLG: C:\PS\test\01\Set-CryptoSettings.zip
ERFOLG: C:\PS\test\01\01a\Set-CryptoSettings.zip
ERFOLG: C:\PS\test\01\01b\Set-CryptoSettings.zip
ERFOLG: C:\PS\test\02\Set-CryptoSettings.zip
Entpackung beendet: 2024-12-15 20:53:03

So kannst du nachher nachvollziehen, ob irgendwo Archive nicht verarbeitet worden sind.
Lochkartenstanzer
Lochkartenstanzer 15.12.2024, aktualisiert am 16.12.2024 um 10:27:38 Uhr
Goto Top
Moin,

ist eigentlich ein bash-einzeiler. Entweder mit einem llive-linux wie knoppix booten oder das Windows-Subsystem für Linux + ein Linux nach Wahl installieren und in der Bash folgendes eingeben:

find /Pfad/zum/Root/verzeichnis/der/dateien/  -iname "*.zip" | sed -e "s:.zip$::g" | xargs -I XXXX 7z x -oXXXX XXXX.zip  

lks
Kamelle
Kamelle 16.12.2024 um 10:08:24 Uhr
Goto Top
@prinzjulius:
Es gibt immer wieder die Meldung::

Line |
  56 |      Add-Content -Path $LogFilePath -Value $Message
     |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Unable to write content because it is a directory: 'D:\Disk_D\'.  


Außerdem: kein LOG. Ich denke das hängt mit der Fehlermeldung am Anfang zusammen.
gastric
gastric 16.12.2024 aktualisiert um 11:11:20 Uhr
Goto Top
Fehler in Zeile 47 des ob. Code, doppelte Anführungszeichen in einzelne umwandeln.
# ...
$LogFileName = (Get-Date -Format "yyMMdd-HHmmss") + ".log"   
# ....
prinzjulius
prinzjulius 16.12.2024 um 11:55:26 Uhr
Goto Top
@gastric Vielen Dank! Das hatte ich übersehen.

Der Code oben ist angepasst.
Kamelle
Kamelle 16.12.2024 um 12:05:50 Uhr
Goto Top
@gastric:

Danke für den Hinweis.
Wenn ich den Scan jetzt abbreche und das Script ändere, wie kann ich mit dem Neustart dann Dubletten bei Entpacken abfangen?
Beim Parameter foreach -parallel müsste ich ja eine Auflistung mehrerer Aktivitäten haben. Das sehe ich hier aber nicht.?

Deinen Lösungsvorschlag werde ich heute Nachmittag mit einer anderen Platte noch mal checken.
prinzjulius
prinzjulius 16.12.2024 um 12:14:19 Uhr
Goto Top
Wenn ich nicht ganz daneben liege, ist es mit einem einfachen "-parallel" anhängen nicht getan. Das ganze Script müsste umgebaut werden, da das "-parallel" auf ein vorgegebenes Array an Dateien ausgeführt werden muss. Dazu müsste man erst einmal alle .zip-Dateien suchen und diese Liste könnte man dann parallel abarbeiten.
Wie sich das verhält, wenn man da ein 600.000er Array übergibt, weiß ich nicht. Das ganze ist auch nur mit PowerShell 7 lauffähig.

Bereits ausgeführte Extraktionen werden einfach überschrieben. Du hast also am Ende keine doppelten Daten.

Was zu einem Problem werden könnte, sind .zip-Dateien in den .zip-Dateien.
Kamelle
Kamelle 16.12.2024 um 14:40:08 Uhr
Goto Top
Danke gastric, läuft jetzt auch mit log face-smile> Zitat von @gastric:

Fehler in Zeile 47 des ob. Code, doppelte Anführungszeichen in einzelne umwandeln.
# ...
$LogFileName = (Get-Date -Format "yyMMdd-HHmmss") + ".log"   
# ....
Kamelle
Kamelle 16.12.2024 um 15:01:42 Uhr
Goto Top
@gastric:
Bei deinem Script bekomme ich die Meldungen
PowerShell 7.4.6
PS C:\Users\sunso> start-transcript E:\transcript.txt
Transcript started, output file is E:\transcript.txt
PS C:\Users\sunso> .\unzip.ps1
.\unzip.ps1: The term '.\unzip.ps1' is not recognized as a name of a cmdlet, function, script file, or executable program.  
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
PS C:\Users\sunso> e:
PS E:\> .\unzip.ps1
Expand-Archive: E:\Unzip.ps1:2
Line |
   2 |  … p -Recurse){Expand-Archive -Path $file.Fullname -DestinationPath $fil …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The path '' either does not exist or is not a valid file system path.  
gastric
gastric 16.12.2024 aktualisiert um 17:42:59 Uhr
Goto Top
Zitat von @Kamelle:

@gastric:
Bei deinem Script bekomme ich die Meldungen
PowerShell 7.4.6
PS C:\Users\sunso> start-transcript E:\transcript.txt
Transcript started, output file is E:\transcript.txt
PS C:\Users\sunso> .\unzip.ps1
.\unzip.ps1: The term '.\unzip.ps1' is not recognized as a name of a cmdlet, function, script file, or executable program.  
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
PS C:\Users\sunso> e:
PS E:\> .\unzip.ps1
Expand-Archive: E:\Unzip.ps1:2
Line |
   2 |  … p -Recurse){Expand-Archive -Path $file.Fullname -DestinationPath $fil …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The path '' either does not exist or is not a valid file system path.  

Dann hast du das Skript nicht richtig angepasst läuft wie gesagt problemlos, ist ja nun echt nix besonderes, guckst du die Demo hierzu
https://tio.run/##hVBNT8MwDL3nV1jbDoCUVut9B8Qo4oIQR25Z6q0WaVISF8aA316ytH ...
(Der einzige Unterschied in der Demo sind die Pfadangaben, da das ein Online Linux System ist auf dem das läuft und die Generierung der Beispiel-Daten). Funktioniert aber auch problemlos unter Windows so, siehe ganz oben.

Vielleicht zur Abwechslung mal etwas lesen und lernen 😉
https://learn.microsoft.com/de-de/powershell/scripting/learn/ps101/01-ge ...
Kamelle
Kamelle 16.12.2024 um 17:34:36 Uhr
Goto Top
Wo ist denn in dem Script der Bezug zu $ziel?
gastric
gastric 16.12.2024 aktualisiert um 17:48:29 Uhr
Goto Top
Zitat von @Kamelle:

Wo ist denn in dem Script der Bezug zu $ziel?

$ziel gibt es nur in der ersten meiner Variante , denn bei der Zweiten ist das Ziel ja jeweils der Ordner in dem die ZIP Datei selbst liegt deswegen braucht es diese Variable dort nicht, lies doch den Text in meinem ersten Post noch mal ganz in Ruhe !!

Diese Frage hast du hier ja btw. noch überhaupt niemandem beantwortet welche Variante du davon überhaupt meinst... Denn es gibt viele Varianten für das Entpacken: Ein zentraler Ordner, oder im Ordner der ZIP-Datei, oder in einem Unterordner in dem die ZIP Datei liegt, usw. ...
Die beiden ersten habe ich in meinem ersten Post dargelegt.
Kamelle
Kamelle 16.12.2024 um 19:40:28 Uhr
Goto Top
Ich hatte bereits geschrieben, dass es nicht in einen Ordner soll, sondern die Ordnerstruktur beibehalten werden soll.
In deinem Demo ist ein $ziel angegeben, im Script sehe ich aber keinen entsprechendes Element, dass sich darauf bezieht.
gastric
gastric 16.12.2024 aktualisiert um 21:39:20 Uhr
Goto Top
Zitat von @Kamelle:

Ich hatte bereits geschrieben, dass es nicht in einen Ordner soll, sondern die Ordnerstruktur beibehalten werden soll.
Das kann aber leider vieles bedeuten. Ob du damit meinst das das die Ordnerstruktur innerhalb der ZIP-Datei betrifft oder ob die Ordnerstruktur in einem neuen separaten Ordner wiederhergestellt werden soll oder in der jetzigen sagt diese sehr allgemein gehaltene Aussage überhaupt nicht aus!
Für Programmierprojekte ist daher Präzsion oberste Prämisse bei der Definition von SOLL Vorgaben.
In deinem Demo ist ein $ziel angegeben, im Script sehe ich aber keinen entsprechendes Element, dass sich darauf bezieht.
Nein dort ist keine Variable mit dem Namen $ziel vorhanden, da hast du den falschen Link genutzt, der erste war mit expliziten Nennen eines Zielordners weil dort ein zentraler Ordner für das extrahieren genutzt wurde:
Hier der erste Link mit zentralem Zielordner
https://tio.run/##hVHBTsMwDL3nK6xtB0BKq/W@AwKGuCGO3LLUWyzSpCQuVAO@vWTp0G ...

Beim zweiten Link den ich zuletzt gepostet habe werden die ZIPs in den Ordner entpackt in dem sie sich befinden, deswegen macht dort die Angabe der Variablen "$ziel" keinen Sinn mehr weil der Pfad ja dynamisch ist und mithilfe von $file.DirectoryName aus dem FileInfo Objekt der ZIP-Datei extrahiert wird.
https://tio.run/##hVBNT8MwDL3nV1jbDoCUVut9B8Qo4oIQR25Z6q0WaVISF8aA316ytH ...

Works as designed. Einfach mehr damit beschäftigen dann steigst du auch selbst dahinter. Good luck.

I'm out.
Kamelle
Kamelle 16.12.2024 aktualisiert um 22:01:31 Uhr
Goto Top
Ich habe nur dein Demo gemeint.

Ich bin mit PS in seiner gesamten Komplexität vertraut. Wenn mir aber ein Demo vorgehalten wird, in dem eine Variable keine Entsprechung hat, kann ich schon erkennen.
Ist ja übrigens nett, das du den Demo-link ersetzt hast.Das Original:
https://tio.run/##hVBNT8MwDL3nV1jbDoCUVut9B8Qo4oIQR25Z6q0WaVISF8aA316ytH ...
gastric
gastric 17.12.2024 aktualisiert um 00:58:33 Uhr
Goto Top
Zitat von @Kamelle:

Ich habe nur dein Demo gemeint.

Ich bin mit PS in seiner gesamten Komplexität vertraut.
Wieso schreibst du es dir dann nicht selbst 🙃.
Wenn mir aber ein Demo vorgehalten wird, in dem eine Variable keine Entsprechung hat, kann ich schon erkennen.
Ist ja übrigens nett, das du den Demo-link ersetzt hast.Das Original:
https://tio.run/##hVBNT8MwDL3nV1jbDoCUVut9B8Qo4oIQR25Z6q0WaVISF8aA316ytH ...

Öhm nö hab ich nicht. Da ist wie gesagt keine Variable $ziel drin, klick doch selbst mal drauf, kann das sein das du da was siehst was wir nicht sehen oder dein Browser-Cache dir was vormacht 🤔?!

Naja egal, ist ja auch nicht wichtig, da keinerlei Funktionseinschränkung gegeben ist, macht was es soll, nicht mehr nicht weniger, den Rest kannst du ja jetzt selbst an deine Bedürfnisse und Nöte anpassen..
prinzjulius
prinzjulius 17.12.2024 um 02:03:00 Uhr
Goto Top
Zitat von @Kamelle:

Ich bin mit PS in seiner gesamten Komplexität vertraut.

Da fehlt hoffentlich ein „nicht“!? 😉

Auch ich sehe in der von dir verlinkten Version kein $ziel.

Zitat von @Kamelle:

Wo ist denn in dem Script der Bezug zu $ziel?

Und in der anderen Version war $ziel deklariert:

 $ziel = "./extrahiert"   

Und als Ziel angegeben:

Expand-Archive -Path $file.Fullname -DestinationPath $ziel -Force

Hilf uns, dir zu helfen face-smile
Kamelle
Kamelle 17.12.2024 aktualisiert um 13:11:45 Uhr
Goto Top
Ja, es heißt "nicht" face-smile

Das ist übrigens der Ursprungsinhalt.
powershell – gastric