Powershell: Dateien suchen, Ordner, Unterordner
Hallo und guten Morgen.
Leider habe ich noch einen Teil 2, den ich irgendwie nicht gelöste bekomme. Dank @colinardo (Uwe) wurde der Teil 1 sehr gut gelöst, dafür noch mal großen Dank.
Nun habe ich aber noch folgendes Problem.
Wie im Teil 1 bekannt, sollen aus Ordnern und Unterorder bestimmte Dateien gefiltert und entsprechend verarbeitet werden, was ja nun auch wieder klappt.
Nach der Verarbeitung sollen aber die verarbeiteten Dateien entsprechend an einem anderen Ort erstellt werden, inkl. dem Ordner/Unterordner wie an der Quelle.
Beispiel:
Vor der Verarbeitung soll in einem Quellordner, indem sich ca. 10.000 Dateien befinden, inkl. seiner Unterordner nach Dateien vom Typ x gesucht werden, diese werden dann verarbeitet (umgewandelt nach PDF). Das klappt ja auch einwandfrei.
Nur soll am Ziel auch genauso wieder die Ordnerstruktur erstellt werden, inkl. der Unterordner und dort die verarbeiteten Dateien abgelegt werden.
Dieser "test_dat" - Ordner hat ggf. xx Unterordner, indem auch wieder eine Menge Dateien liegen und ggf. verarbeitet werden müssen, sofern sie die Bedingung (Filter) erfüllen.
Dann werden alle gefilterten Dateien in Word geöffnet, dort verarbeitet und als PDF gespeichert. Auch das klappt einwandfrei.
SOLL soll aber sein, dass alle Dateien im Zielordner auch jeweils genauso wieder in Unterordnern erstellt werden
Vielen Dank vorab.
Leider habe ich noch einen Teil 2, den ich irgendwie nicht gelöste bekomme. Dank @colinardo (Uwe) wurde der Teil 1 sehr gut gelöst, dafür noch mal großen Dank.
Nun habe ich aber noch folgendes Problem.
Wie im Teil 1 bekannt, sollen aus Ordnern und Unterorder bestimmte Dateien gefiltert und entsprechend verarbeitet werden, was ja nun auch wieder klappt.
Nach der Verarbeitung sollen aber die verarbeiteten Dateien entsprechend an einem anderen Ort erstellt werden, inkl. dem Ordner/Unterordner wie an der Quelle.
Beispiel:
Vor der Verarbeitung soll in einem Quellordner, indem sich ca. 10.000 Dateien befinden, inkl. seiner Unterordner nach Dateien vom Typ x gesucht werden, diese werden dann verarbeitet (umgewandelt nach PDF). Das klappt ja auch einwandfrei.
Nur soll am Ziel auch genauso wieder die Ordnerstruktur erstellt werden, inkl. der Unterordner und dort die verarbeiteten Dateien abgelegt werden.
$DATDateien = dir "C:\Temp\test_dat\" -include *.mxa, *.dra, *.log -recurse
Dieser "test_dat" - Ordner hat ggf. xx Unterordner, indem auch wieder eine Menge Dateien liegen und ggf. verarbeitet werden müssen, sofern sie die Bedingung (Filter) erfüllen.
Dann werden alle gefilterten Dateien in Word geöffnet, dort verarbeitet und als PDF gespeichert. Auch das klappt einwandfrei.
SOLL soll aber sein, dass alle Dateien im Zielordner auch jeweils genauso wieder in Unterordnern erstellt werden
Vielen Dank vorab.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 252420
Url: https://administrator.de/contentid/252420
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
5 Kommentare
Neuester Kommentar
Moin internet2107,
auch noch am Sonntag fleißig .
Auf deinen letzten Post bezogen könnt dies so aussehen:
(Kommentare siehe Code)
Das Prinzip ist folgendes: Du ersetzt im Pfadnamen der Datei mit Replace dein Quell-Root mit deinem Zielroot, danach erstellst du diese Ordnerstruktur mit new-item und kopierst deine Datei dorthin, fertig.
Grüße Uwe
auch noch am Sonntag fleißig .
Auf deinen letzten Post bezogen könnt dies so aussehen:
(Kommentare siehe Code)
$sourceRoot = 'c:\deinPfad'
$targetRoot = 'D:\deinzielPfad'
dir $path -Include '*.xlsb' -Recurse | %{
# passende DAT Datei suchen
$dat = dir "$sourceRoot\$($_.BaseName.Replace('_','-'))*_USED.DAT" -Recurse | select -First 1
# wenn eine zur xlsb-Datei passende DAT-Datei gefunden wurde
if ($dat){
write-host "Für folgende Datei wurde eine USED-DAT gefunden:"$_.FullName
# -----------------------------------------------------
# Name des neuen Ordners erstellen indem der Quell-Root durch den Zielroot ersetzt wird
$newDir = $_.DirectoryName.Replace($sourceRoot,$targetRoot)
# Zielordnerstruktur erstellen
new-item -ItemType Directory -Path $newDir -Force
# File an seinen neuen Ort kopieren
copy-item $_.FullName "$newDir\$($_.Name)" -Force
# -----------------------------------------------------
}
}
Grüße Uwe
$file_old = $dateien.basename
$file_new = $file_old -replace '^([^\s\(]+).*','$1' | select -unique
foreach ($folder in $file_new)
{
New-Item -Type directory "$path_ziel\$folder" -Force
copy-Item "$path_pdf\$folder*.pdf" "$path_ziel\$folder"
}
p.s. das angehängte where-object in deiner Zeile 18 ist ein ganz grober Fehler. Da hast du die Powershell und die Pipe noch nicht ganz durchblickt. Gefiltert werden kann immer nur vor einer Aktion ! In diesem Fall geht's aber auch ohne Filter via Wildcard im copy-Befehl.