Aus dem gegebenen Anlass, dass ich diese Funktion erst kürzlich selbst benötigte, habe ich mich dazu entschieden, das nachfolgende PowerShell Skript für euch zu veröffentlichen. Manchmal hat man ein unaufgeräumtes Verzeichnis mit sehr vielen Unterordnern, die randvoll mit Bildern oder Videos sind.
Selbstverständlich könnte man nun manuell aufräumen und jeden einzeln Ordner händisch öffnen und die sich darin befindlichen Dateien kopieren und in das darüberliegende einfügen. Aber das kann bei manch einem Szenario einige Stunden an Arbeit bedeuten.
Mit diesem Skript reduzieren wir den Arbeitsaufwand auf wenige Sekunden:
Dafür definieren wir ein Quell- und ein Zielverzeichnis. Im Beispiel des Skripts für die PowerShell möchten wir alle Videos oder Bilder mit einem bestimmten Format aus allen in diesem Quellverzeichnis befindlichen Unterordnern herauskopieren und in das Zielverzeichnis einfügen.
Wir definieren im ersten Abschnitt die Pfade:
# Definiere das Quell- und Zielverzeichnis
$sourceDirectory = "\\192.168.178.30\videos"
$destinationDirectory = "\\192.168.178.30\videos"
In meinem Beispiel haben wir ein Netzwerkpfad eingelesen. Das funktioniert mit lokalen, genauso aber auch mit Netzfreigaben (z.B. von einem NAS) jeglicher Art. Im nächsten Schritt wird das Dateiformat bestimmt. Wir können Filter für alle möglichen Dateiendungen angeben, selbstverständlich würde dieses Skript auch mit anderen Dateien als nur mit Bildern oder Videos funktionieren.
# Finde alle MKV-Dateien in den Unterordnern des Quellverzeichnisses
$mkvFiles = Get-ChildItem -Path $sourceDirectory -Recurse -File | Where-Object { $_.Extension -eq ".mkv" }
Für das Tutorial habe ich mich für Dateien mit der Endung .mkv entschieden. Diese Dateiendung kann durch JPG, AVI oder auch .ZIP ausgetauscht werden. So erhalten wir die Möglichkeit, jedes beliebige Dateiformat selektiert auszuwählen. Unabhängig davon, ob es sich bei den zu kopierenden Dateien um Bilder, Videos oder Dokumente handelt.
Jetzt muss noch eine foreach-Schleife erstellt werden, welche die Variable anspricht und alle Dateien mit der zuvor selektierten Dateiendung von allen Ordnern herauskopiert, die sich in unserem Zielverzeichnis befinden:
# Kopiere die MKV-Dateien aus dem Zielverzeichnis
foreach ($file in $mkvFiles) {
$destinationPath = Join-Path -Path $destinationDirectory -ChildPath $file.Name
Copy-Item -Path $file.FullName -Destination $destinationPath -Force
Damit wir ein Feedback nach dem erfolgreichen Kopiervorgang erhalten, können wir das PowerShell Skript noch um eine Ausgabe erweitern, wenn alle Dateien erfolgreich kopiert worden sind:
Write-Host "Alle MKV-Dateien wurden erfolgreich kopiert."
Zusammengefasst würde das PowerShell Skript jetzt wie folgt aussehen:
# Definierung des Quell- und Zielverzeichnisses
$sourceDirectory = "\\192.168.178.30\videos"
$destinationDirectory = "\\192.168.178.30\videos"
# Alle MKV-Dateien in den Unterordnern des Quellverzeichnisses selektieren
$mkvFiles = Get-ChildItem -Path $sourceDirectory -Recurse -File | Where-Object { $_.Extension -eq ".mkv" }
# Alle MKV-Dateien aus den Unterordnern kopieren und in das Zielverzeichnis einfügen
foreach ($file in $mkvFiles) {
$destinationPath = Join-Path -Path $destinationDirectory -ChildPath $file.Name
Copy-Item -Path $file.FullName -Destination $destinationPath -Force
}
Write-Host "Alle MKV-Dateien wurden erfolgreich kopiert."
Hinweis: Die fett-markierten Variablen müsst ihr anpassen, damit das Skript für die jeweilige Dateiendung funktioniert. Tauscht dafür z. B. .mkv und mkvFiles gegen .jpg und jpgFiles oder eben die Endung, die für euren Einsatz am besten geeignet ist.
Bilder auf allen Unterordnern kopieren und in einem Zielverzeichnis sammeln (Beispiel)
In diesem Abschnitt testen wir das PowerShell-Skript und verwenden es zum Sammeln von JPG-Bilddateien aus einem bestimmten Pfad mit vielen Unterordnern, wo von einige Bilddateien erhalten und manche wiederum nicht. Es muss dringend geputzt werden!
Jetzt wird das oben vorgestellte Skript für die PowerShell mit dem Filter für JPG-Dateien ausgeführt. Dabei wird jedes vorhandene JPEG-Bild aus dem Verzeichnis einschließlich aller Unterverzeichnisse vom angegebenen Quellverzeichnis kopiert und in das Zielverzeichnis eingefügt.
Nach dem erfolgreichen Durchlauf erhalten wir die extrahierten Dateien:
PowerShell Skript erfolgreich getestet: weitere Anwendungsgebiete und Fazit
Der Test verlief erfolgreich. Das Skript ist auch für Wechseldatenträger z. B. für alte externe Festplatten oder USB-Sticks praktisch, die wir in der Schublade gefunden haben und bei denen wir uns nicht mehr sicher sind, ob Bilder oder Videos auf dem Speichermedium liegen.
Geben wir als Pfad den Stick oder die externe Festplatte an, können wir alle wichtige Bild- und Videodateien innerhalb von wenigen Sekunden auf dem Computer sichern.
Eine Geheimwaffe für unkomplizierte Quick & Dirty Datensicherungen
Tipp: Wir können auch ein PowerShell-Skript verwenden, welches alle Video- und Bilddateien aus einem Zielverzeichnis inklusive aller sich darin befindlichen Unterverzeichnissen (Ordner) kopiert. Dafür legen wir direkt eine vordefinierte Auswahl an bestimmten Formaten bzw. Dateiendungen fest:
# Quell- und Zielverzeichnisse
$sourceDirectory = "C:\Daten"
$destinationDirectory = "C:\Extrahierte Daten"
# Liste mit den unterstützten Datei-Erweiterungen (Auf Wunsch beliebig erweitern)
$supportedExtensions = @(".mp4", ".avi", ".mkv", ".jpg", ".png", ".bmp")
# Finde alle Dateien in den Unterordnern des Quellverzeichnisses
$Endungen = Get-ChildItem -Path $sourceDirectory -Recurse -File | Where-Object { $supportedExtensions -contains $_.Extension }
# Dateien in das Zielverzeichnis kopieren
foreach ($file in $Endungen) {
$destinationPath = Join-Path -Path $destinationDirectory -ChildPath $file.Name
Copy-Item -Path $file.FullName -Destination $destinationPath -Force
}
Write-Host "Alle Dateien wurden erfolgreich in das Zielverzeichnis verschoben."
Das PowerShell-Skript kann jetzt dafür verwendet werden, schnelle und unkomplizierte Datensicherungen von bestimmten Verzeichnissen zu ermöglichen. Auf Wunsch können noch weitere Dateiendungen hinzugefügt werden. Erweitere die Auflistung wie angegeben einfach mit PDF, Doc usw.