entpacken_rekursiv_code

Rekursives Entzippen am Ort der Zip-Datei

Ich habe ein Problem, für das ich im Internet keine passende Lösung finden konnte. Zwar gibt es Artikel zu ähnlichen Problemen, aber die vorgeschlagenen Lösungen haben entweder Fehler nicht berücksichtigt oder die Zip-Dateien immer nur an einem festen Ort entpackt. Deshalb habe ich beschlossen, ein eigenes Skript zu erstellen, das folgende Aufgaben erfüllen soll:

  1. Es soll alle Zip- und Rar-Dateien entpacken.
  2. Die Dateien sollen immer in einem Ordner mit dem Namen der entsprechenden Zip-/Rar-Datei entpackt werden, der sich im selben Verzeichnis befindet.
  3. Fehler sollen ignoriert werden.
  4. Bei erfolgreichem Entpacken soll die ZIP-Datei gelöscht werden.

Ich habe ein Powershell-Skript geschrieben, das durch die Variable startPath angibt, welches Verzeichnis als Root-Verzeichnis dienen soll:

$startPath = "D:\Public"

Das Skript trägt den Namen entpacken_rekursiv.ps1, kann aber beliebig umbenannt werden, solange die Dateiendung .ps1 beibehalten wird. Im folgenden Block wird der Code des Programms dargestellt:

# Define the path to start the search
$startPath = "D:\Public"

# Set up the PowerShell compression module
Import-Module Compression

# Search for ZIP and RAR files recursively
$zipFiles = Get-ChildItem -Path $startPath -Recurse -Filter "*.zip"
$rarFiles = Get-ChildItem -Path $startPath -Recurse -Filter "*.rar"

# Loop through the ZIP files and extract them
foreach ($zipFile in $zipFiles)
{
    # Check if the destination directory already exists
    $destinationDirectory = Join-Path -Path $zipFile.DirectoryName -ChildPath $zipFile.BaseName
    if (-Not (Test-Path -Path $destinationDirectory))
    {
        # Create the destination directory
        New-Item -ItemType Directory -Path $destinationDirectory | Out-Null
    }

    # Extract the ZIP file, ignoring errors and passwords, and overwriting existing files
    Expand-Archive -LiteralPath $zipFile.FullName -DestinationPath $destinationDirectory -ErrorAction SilentlyContinue -Force

    # Delete the ZIP file
    Remove-Item -Path $zipFile.FullName -Force

    # Log the extraction
    Write-Output "Extracted ZIP file $($zipFile.FullName) to $destinationDirectory"
}

# Loop through the RAR files and extract them
foreach ($rarFile in $rarFiles)
{
    # Check if the destination directory already exists
    $destinationDirectory = Join-Path -Path $rarFile.DirectoryName -ChildPath $rarFile.BaseName
    if (-Not (Test-Path -Path $destinationDirectory))
    {
        # Create the destination directory
        New-Item -ItemType Directory -Path $destinationDirectory | Out-Null
    }

    # Extract the RAR file, ignoring errors and passwords, and overwriting existing files
    Expand-Archive -LiteralPath $rarFile.FullName -DestinationPath $destinationDirectory -ErrorAction SilentlyContinue -Force

    # Log the extraction
    Write-Output "Extracted RAR file $($rarFile.FullName) to $destinationDirectory"
} 

Es gibt eine weitere Möglichkeit, das Skript zu erweitern. Wenn man regelmäßig Zip-Dateien an einem bestimmten Ort ablegt, kann man in Windows einen Auftrag erstellen, der das Skript automatisch ausführt, z. B. jedes Mal, wenn der Computer neu gestartet wird. Allerdings sollte man dabei die Auswirkungen auf die Systemleistung berücksichtigen.

Um einen solchen Auftrag in Windows zu erstellen, sucht man einfach nach „Aufgabenplanung“. Eine detaillierte Anleitung findet man in diesem externen Artikel. Es ist jedoch wichtig zu beachten, wie man ein Powershell-Skript in Aufgabenplanung startet. Dabei gibt es zwei Besonderheiten:

  • Unter „Programm/Script“ muss der Pfad zur Powershell-Exe von Windows angegeben werden, der sich normalerweise unter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe befindet.
  • Zweitens muss das Argument -command verwendet werden, um den Pfad zum Powershell-Skript anzugeben. Zum Beispiel: -command "D:\Public\entpacken_rekursiv.ps1".

Hier noch ein Bild wie es aussehen könnte:

Zip-Entpacker als Aufgabe anlegen

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.