# [batch] Alle Dateien mit ident. Dateinamen in vorh. Ordner mit ident. Ordnernamen kopieren?



## rloxley (31. Mai 2018)

Hallo 

"Problem 1":
Die Situation: In einem Windows-Hauptordner liegen diverse Dateien unterschiedlicher Formate + diverse Unterordner (allesamt auf EINER Ebene).
Es ist jeweils ein Unterordner vorhanden, der den identischen Namen hat wie EINIGE vorhandene Dateien.
BeispieL: Unterordner: "123", "456" und "789". Dateien: 123.avi, 123.jpg, 123.nfo / 456.mp4, 456.jpg, 456.nfo / 789.wmv, 789.jpg und 789.nfo .

Ich hätte gerne eine batch-Datei, die ALLE DATEIEN entsprechend ihrem Dateinamen in den jeweiligen ORDNER mit identischem Namen VERSCHIEBT. Nicht KOPIERT ;-)
Also ALLE auffindbaren 123.*-Dateien in den 123-Ordner, alle 456.*-Dateien in den 456-Ordner, usw.
da diese Aufgabe immer wiederkehrt mit diversen Hauptordnern und unzähligen Dateien & Ordnern ;-)
Die Namen enthalten auch Leerzeichen.

"Problem 2":
Gleiche Ausgangslage wie oben. Ich würde noch sehr gerne automatisch EINEN BESTIMMTEN vorhandenen Unterordner (mit immer gleichem Namen) in ALLE ANDEREN vorhandenen Unterordner kopieren können. Um beim Beispiel von oben zu bleiben: Der Ordner "123" soll in die Ordner "456", "769", usw. kopiert werden, sodass er in JEDEM anderen Unterordner vorhanden ist. Es handelt sich um einen Ordner mit Windows-untypischer Namenskonvention, dem Namen ist ein Punkt vorangestellt, also .Name . Ist das Linux oder Apple-Norm? Jedenfalls MUSS er so lauten.

Es wäre super, wenn das jemand für mich hinkriegen könnte!

Dankeschön im Voraus 

Viele Grüße


----------



## HonniCilest (1. Juni 2018)

Ich bin leider nicht so fit in batch. Ich bevorzuge Powershell. Falls eine Powershell Lösung für dich auch ok ist sei dir hiermit geholfen:


```
$rootDirectory = 'C:\test'
$coreFolder = 'main'

# ------------------------------------

cls

# Problem 1
gci $rootDirectory -File | %{
    mv -Path $_.FullName -Destination ($rootDirectory, $_.BaseName, $_.Name -join '\') -ErrorAction SilentlyContinue
}


# Problem 2
gci $rootDirectory -Directory -Exclude $coreFolder | %{
    cp -Path ($rootDirectory, $coreFolder -join '\') -Destination ($_.FullName) -ErrorAction SilentlyContinue
}
```


----------



## ComFreek (1. Juni 2018)

@HonniCilest: +1 dafür, dass du PowerShell vorschlägst! Ob -ErrorAction SilentlyContinue die beste Lösung ist, um nicht existente Ordner zu "überspringen", darüber bin ich mir gerade nicht sicher. Eventuell ist folgende Lösung sauberer, da nur die DirectoryNotFoundExceptions ignoriert werden. 

```
# Problem 1
gci $rootDirectory -File | %{
    try {
        $destinationPath= Join-Path (Join-Path $rootDirectory $_.BaseName) $_.Name
        mv -Path $_.FullName -Destination $destinationPath -ErrorAction Stop
    }
    catch [System.IO.DirectoryNotFoundException] {
        Write-Information "File $_.FullName skipped because no similarly-named directory was found."
    }    
}
```


----------



## HonniCilest (1. Juni 2018)

> @HonniCilest: +1 dafür, dass du PowerShell vorschlägst!



 Danke, dass du das auch bevorzugst! Mir fällt es immer schwer batch zu lesen und aus diesem Grund auch es selbst zu erstellen.

Ich bin da völlig konform, sauberer wäre es mit einem korrekten Error-Handling.

Join-Path kannte ich noch nicht - interessant  Obwohl ich mich frage, warum es nicht mehr als 2 Argumente akzeptiert?!


----------



## ComFreek (1. Juni 2018)

HonniCilest hat gesagt.:


> Join-Path kannte ich noch nicht - interessant  Obwohl ich mich frage, warum es nicht mehr als 2 Argumente akzeptiert?!


Ich hatte genau denselben Gedanken  Ich hatte sogar extra noch in der offiziellen Doku nachgesehen. Mehrere Elternpfadargumente funktionieren: Join-Path -Path C:, D:, E:, F: -ChildPath New, aber nicht mehrere Kindargumente 

Gerade habe ich noch [io.path]::combine('c:\', 'foo', 'bar') gefunden. Aber wenn du dir die Kommentare unter dem verlinkten Post durchliest, dann wirkt das nach keinem sehr abwärtskompatiblem Verhalten. ("Seems the parameter limit is 3, after 3 the first parameter is ignored." )


----------



## rloxley (3. Juni 2018)

Einen schönen Sonntag allen 
... und VIELEN VIELEN DANK für Eure Bemühungen und Euer Engagement. Erstklassig!

@HonniCilest
Ich bin da völlig offen, welche Skriptsprache das für mich erledigt - gern auch Powershell  Habe ich bislang noch nie genutzt... Ich habe jetzt für mein System (Windows 7 x64) alles notwendige erledigt (Microsoft-update installiert, Ausführung von Skripts aktiviert) und Dein allererstes Skript getestet:
Es macht GENAU, was es soll!  Wirst Du für selbstverständlich halten... ICH bin begeistert 

@comfreak
VIELEN DANK dafür, dass Du Dir das Skript angesehen - und es nochmal optimiert hast!
Auch das funktioniert (natürlich) einwandfrei 

1. Könnt Ihr mir gute Einstiegsmöglichkeiten für "Totalanfänger in powershell-Skriptprogrammierung" empfehlen? Das macht wirklich neugierig...
2. Was wäre denn... wenn von den "DATEIEN mit identischem Namen" EINIGE am Ende des Namens unterschiedliche "Ergänzungen" enthalten würden?
Beispiel:
Gleiche Ausgangslage wie oben, aber:
- Ordner: DokuAfrika
- Dateien: DokuAfrika.avi, DokuAfrika.nfo, DokuAfrika-123.jpg, DokuAfrika-456.jpg
Die Namen wären also nur "fast gleich"... aber die Ergänzungen sind bekannt:
Es gäbe IMMER NUR ZWEI MÖGLICHE: Wie in diesem Beispiel: -123 und -456
Ginge das auch?

Ich HÄTTE da sicher noch 2, 3 andere, ähnliche Fälle, in denen "Ihr" mir die Arbeit sicher EXTREM erleichtern könntet, möchte (gerade als Neuling) aber nicht "unverschämt" sein.
Wenn ich darf, würde ich die gerne erfragen, sobald sie mir bei der Arbeit in den Sinn kommen...

Viel geschrieben, kurz: HERZLICHES DANKESCHÖN!

Viele Grüße


----------



## ComFreek (3. Juni 2018)

rloxley hat gesagt.:


> Ausführung von Skripts aktiviert


Nur um sicher zu gehen: Wenn du Get-ExecutionPolicy in PowerShell aufrufst, kommt RemoteSigned, oder? Unrestricted würde ich nicht empfehlen und zu Ersterem umsetzen, wie hier beschrieben.



rloxley hat gesagt.:


> 1. Könnt Ihr mir gute Einstiegsmöglichkeiten für "Totalanfänger in powershell-Skriptprogrammierung" empfehlen?


So etwas wie ein Buch, eine Video- oder Artikelreihe habe ich zu PowerShell nie wirklich gelesen. Mein Wissen ist eine Ansammlung von vielen einzelnen Google-Suchen zu Dingen, die ich in den Momenten jeweils gebraucht habe.
Recht häufig stößt man auf den Hey, Scripting Guy! Blog, welchen ich immer recht hilfreich finde.
Ansonsten gibt es natürlich noch die offizielle PowerShell (API) Referenz. (Tipp: dort _nicht_ durchklicken, sondern einfach "[Name deiner PowerShell Funktion/Klasse, nach der du suchen möchtest] MSDN" bei Google suchen.)



rloxley hat gesagt.:


> Ginge das auch?


Ja, das ginge zum Beispiel wie folgt 

```
# Problem 1
gci $rootDirectory -File | % {
    $_.BaseName -match "^(.*?)(-123|-456)?$" | Out-Null
    $relevantFileName = $matches[1]

    $destinationPath= Join-Path (Join-Path $rootDirectory $_.relevantFileName) $_.Name
    try {
        Move-Item -Path $_.FullName -Destination $destinationPath -ErrorAction Stop
    }
    catch [System.IO.DirectoryNotFoundException] {
        Write-Information "File $_.FullName skipped because no similarly-named directory was found."
    }  
}
```
Mittels Regex extrahiere ich aus "abc-123" genau den Part "abc". Aus "abc-4567" wird jedoch das ganze "abc-4567" als relevanter Dateiname extrahiert - weil die 7 eben nicht auf das Schema -123 oder -456 passt. Falls du nach Regex und .* suchst, beachte, dass ich mit .*? _non_-greedy matche.

Auch hilfreich: Durch Anhängen von -WhatIf an den Move-Item Befehl kannst du sehen, was passieren würde, ohne eine Datei tatsächlich zu verschieben.



rloxley hat gesagt.:


> VIELEN DANK dafür, dass Du Dir das Skript angesehen - und es nochmal optimiert hast!
> Auch das funktioniert (natürlich) einwandfrei


Danke  Nicht viele Leute probieren auch Antworten aus, nachdem die erste Antwort bereits funktioniert hat.
Es hat übrigens sehr geholfen, dass du Beispiele hinzugefügt hast. "Ein Beispiel sagt mehr als 1000 Worte", könnte man hier fast sagen. Gern kannst du noch mehr Anwendungsfälle posten.
Bei manchen Frameworks/Technologien gibt es Unmengen an high-level Dokumentation, aber kein einziges konkretes 10-Zeilen Beispiel für einen konkreten Anwendungsfall. Dementsprechend hoffe ich, dass die Skripte hier eine Basis bilden können, auf der du nun mit Hilfe der Online-Dokumentation von PowerShell auch langsam herumexperimentieren kannst


----------



## HonniCilest (3. Juni 2018)

Ich habe leider auch kein Buch oder sowas, alles selbst beigebracht. Ich bin zu Powershell gekommen, weil ich eine starkes Script für xml brauchte. Das Wissen habe ich - wie ComFreak - auch nur an eigenen Anwendungsfällen und Google erweitert. Dafür ist aber ein Basis Wissen im Programmierumfeld erforderlich denke ich. Powershell's Befehle haben oft einen Alias, welcher sich an batch und unix orientiert, eventuell hilft dir das auch.

Es gibt noch weitere Möglichkeiten den Suffix abzutrennen. ComFreak macht es per Regex, du könntest aber z.B. auch den String splitten.

```
Write-Host ('Test-123.jpg' -split '-')[0] # Ausgabe: Test
```

Ich schließe mich außerdem ComFreak an, deine Problemstellung wurde als Vorzeigebeispiel formuliert.

PS.: Es gab doch mal ein Powershell Syntax Highlighting für Code in diesem Forum. Was ist damit passiert


----------



## rloxley (5. Juni 2018)

Hallo
und danke für Eure grundsätzlich sehr freundlichen Antworten 

Meine eigene "Lernweise" ähnelt Euren sehr: Learning by doing, praxisorientiert nach dem Motto "Was bringt mir das?", "Welchen aktiven Nutzen habe ich davon?" Endlos theoretisches "BlaBla" ist mir manchmal zu abstrakt. Wenn ich z.B. an den MCSE-Lehrgang und das "Osi-Modell" denke... *BAH!

Oft ist es ja so, dass erfahrene Leute zwar keine direkte Empfehlung haben, aber zumindest sehr gut vermeintliche Quellen als unsinnig ("kannste Dir sparen") ausschliessen können, weil in der Praxis so nicht zu gebrauchen... ;-) Die von Dir @comfreak genannte gute Quelle "Hey Scripting Guys" ist mir tatsächlich schon öfter begegnet 

Dankeschön auch für Eure Resonanz zur Fragestellung 
Ich mag es sehr, wenn man mich auf Anhieb möglichst nicht missverstehen kann. Und es ist auch eine Frage des Umgangs miteinander, wenn man jemanden (zudem Fremdes) um Hilfe bittet, dieser nicht noch x-mal nachfragen muss, wie es denn jetzt gemeint wäre... Die Helfenden "müsssen" dem Hilfesuchenden ja schließlich nicht noch lange hinterherlaufen, um ihm überhaupt helfen zu KÖNNEN ;-)
Über Details kann man sich sicher noch verständigen, aber die Grundfrage sollte man schon so stellen, dass sie dem Gegenüber auch deutlich wird. Eine Beispiel-Gegenüberstellung IST -> SOLL hilft dabei oft am Besten 

Vielleicht habt ihr auch bemerkt, dass ich im Grunde schon oft weiss, was es bei meinem "Problem" zu beachten gibt, dies aber aufgrund fehlender Skriptprogrammierungs-Erfahrung eben nicht selber umsetzen kann... Powershell scheint wirklich sehr viele Möglichkeiten zu bieten - und Eure auf Anhieb funktionierenden Lösungen kamen so schnell, dass es mein Interesse geweckt hat 

Nachdem ich Eure Skripts genutzt habe, um meine "Arbeiten" zu erledigen, möchte ich sie als meinen Einstieg in Powershell nutzen und mir ihren Code/Aufbau ansehen ;-)

Ich werde gleich das neue Skript von Dir @comfreak ausprobieren... Dankeschön schon einmal dafür!

Haltet mich bitte nicht für "blöde", ABER:
Wie würde das Skript für den umgekehrten Weg aussehen:
"Alle DATEIEN aus den Unterordnern in den Hauptordner VERSCHIEBEN?

PS:


> Nur um sicher zu gehen: Wenn du Get-ExecutionPolicy in PowerShell aufrufst, kommt RemoteSigned, oder?


Ja, das habe ich beachtet. Danke der Nachfrage 

Viele Grüße


----------



## HonniCilest (5. Juni 2018)

> Haltet mich bitte nicht für "blöde", ABER:
> Wie würde das Skript für den umgekehrten Weg aussehen:
> "Alle DATEIEN aus den Unterordnern in den Hauptordner VERSCHIEBEN?



Ach quatsch, du bist halt NOCH nicht fit in Powershell, niemand hält dich für blöd. Ich bin sogar davon überzeugt, dass du es in geraumer Zeit gut beherrschst. Das Interesse ist ja da 

Du brauchst die Option -Recurse


```
$rootDirectory = 'C:\test'

gci $rootDirectory -Recurse -File | %{
    mv -Path $_.FullName -Destination (Join-Path -Path $rootDirectory -ChildPath $_.Name)
}
```

bzw. wenn du alle Dateien in deinem 'main' Verzeichnis (siehe Problem 2) ignorieren möchtest:

```
$rootDirectory = 'C:\test'
$coreFolder = 'main'

gci $rootDirectory -Recurse -File | ?{$_.Directory.Name -ne $coreFolder} | %{
    mv -Path $_.FullName -Destination (Join-Path -Path $rootDirectory -ChildPath $_.Name)
}
```

Übrigens, da du dich damit mehr auseinandersetzen möchtest:
In meinen Beispielen verwende ich viele Aliase. Diese kann man auch ausformulieren, wenn man das möchte:
cls --> Clear-Host
gci --> Get-ChildItem
% --> ForEach
? --> Where-Object
mv --> Move-Item
cp --> Copy-Item


----------



## rloxley (5. Juni 2018)

@comfreak


> Ja, das ginge zum Beispiel wie folgt


Aber nicht, wenn man sich wahrscheinlich falsch anstellt... 
Ich habe:
1. den Code im ersten Skript mit diesem ersetzt
2. in der dritten Zeile:

```
$_.BaseName -match "^(.*?)(-123|-456)?$" | Out-Null
```
die Suffixe -123 und -456 entsprechend meiner vorhandenen abgeändert (-Hinz / -Kunz)
3. Das Skript im Ordner c:\test gespeichert und mit Rechtsklick auf "mit Powershell ausführen" gestartet.
Sieht jetzt so aus:

```
$rootDirectory = 'C:\test'
$coreFolder = '.Ordner'

# ------------------------------------

cls

# Problem 1
gci $rootDirectory -File | % {
    $_.BaseName -match "^(.*?)(-Hinz|-Kunz)?$" | Out-Null
    $relevantFileName = $matches[1]

    $destinationPath= Join-Path (Join-Path $rootDirectory $_.relevantFileName) $_.Name
    try {
        Move-Item -Path $_.FullName -Destination $destinationPath -ErrorAction Stop
    }
    catch [System.IO.DirectoryNotFoundException] {
        Write-Information "File $_.FullName skipped because no similarly-named directory was found."
    }
}


# Problem 2
gci $rootDirectory -Directory -Exclude $coreFolder | %{
    cp -Path ($rootDirectory, $coreFolder -join '\') -Destination ($_.FullName) -ErrorAction SilentlyContinue
}
```

Das Powershell-Fenster erscheint kurz (es ist nichts drin zu sehen, keine Fehlermeldung), aber im Ordner hat sich NICHTS getan. KEINE Datei wurde verschoben...
Was habe ich falsch gemacht? 

@HonniCilest

```
Write-Host ('Test-123.jpg' -split '-')[0] # Ausgabe: Test
```
Wie wende ich das in @comfreak 's Skript an? Entschuldige, das kann ich noch nicht... ;-)


```
$rootDirectory = 'C:\test'

gci $rootDirectory -Recurse -File | %{
    mv -Path $_.FullName -Destination (Join-Path -Path $rootDirectory -ChildPath $_.Name)
}
```
Funktioniert wieder auf Anhieb super. Ich danke Dir 

Wie meinst Du


> bzw. wenn du alle Dateien in deinem 'main' Verzeichnis (siehe Problem 2) ignorieren möchtest:


?
Das habe ich inhaltlich nicht verstanden... 



> Ach quatsch


Ich meinte nur... "Jetzt hat er es so, wie er wollte - und nun will er es wieder rückgängig machen?"
Zur Erklärung: Der erste Fall ist für NEUE volle Hauptordner, der zweite für BEREITS BESTEHENDE, in denen die Dateien jetzt noch zu überarbeiten sind ;-)

Dankeschön und Viele Grüße


----------



## HonniCilest (5. Juni 2018)

rloxley hat gesagt.:


> Wie meinst Du
> ?
> Das habe ich inhaltlich nicht verstanden...



Naja, könnte ja sein, dass du diese Struktur hast

```
root
--123
----main
------main.txt
----123.jpg
----123.txt
--456
----main
------main.txt
----456.jpg
----456.txt
```
und du die `main.txt` nicht mit in den root verschieben wollen würdest und die `main` getrennt behandeln willst, z.B. komplett löschen. Die erste Variante würde alle main.txt ebenfalls verschieben. Das ist der Teil, der in deinem Problem 2 in alle Ordner kopiert wurde.

Variante mit Split (aber ungetestet):

```
# Problem 1
gci $rootDirectory -File | % {
    $destinationPath= Join-Path (Join-Path $rootDirectory ($_.BaseName -split '-')[0]) $_.Name
    try {
        Move-Item -Path $_.FullName -Destination $destinationPath -ErrorAction Stop
    }
    catch [System.IO.DirectoryNotFoundException] {
        Write-Information "File $_.FullName skipped because no similarly-named directory was found."
    }  
}
```


----------



## rloxley (5. Juni 2018)

Ah... alles klar. Super, dass Du das auch mit bedacht hast

Merkwürdig, auch Deine Variante kopiert bei mir GAR KEINE Dateien von "Problem 1", aber den Ordner von "Problem 2"... Problem 1 wird sozusagen einfach "übersprungen", Problem 2 korrekt erledigt... 

Dabei habe ich im funktionierenden Ausgangs-Skript jetzt mehrmals den Abschnitt "Problem" 1" durch Eure neuen Codezeilen ersetzt. Das mache ich doch nicht immer wieder gleich falsch - oder doch? 

Viele Grüße


----------



## rloxley (5. Juni 2018)

Moment, ich ahne vielleicht, warum...
Die Namen der Dateien (und Ordner) enthalten MEHRERE Bindestriche!
Die Struktur entspricht diesem Beispiel:
Ordner:
DokuAfrkia - Teil 1 - 1080p
Dateien:
DokuAfrika - Teil 1 - 1080p.mp4
DokuAfrika - Teil 1 - 1080p.nfo
DokuAfrika - Teil 1 - 1080p.pdf
DokuAfrika - Teil 1 - 1080p-Foto1.jpg
DokuAfrika - Teil 1 - 1080p-Foto2.jpg

Die Suffixe sind also "-Foto1" und "-Foto2"

ENTSCHULDIGT! Ich ging bei der Problemschilderung davon aus, dass Ihr jeweils den GESAMTEN Suffix verwendet, nicht nur den Bindestrich!

Das ist der Fehler, oder?


----------



## HonniCilest (5. Juni 2018)

Ja der Split hat nur den Bindestrich aufgeteilt. Index 0 ist damit "Doku Afrika ", sollte also theoretisch in jenem Ordner landen


----------



## rloxley (5. Juni 2018)

Eure beiden Skripts verschieben KEINE Dateien, nur den Ordner korrekt...


----------



## HonniCilest (6. Juni 2018)

rloxley hat gesagt.:


> Eure beiden Skripts verschieben KEINE Dateien, nur den Ordner korrekt...



Ich habe auch nur das ComFreak angepasst gehabt. Er hatte einen winzigen Fehler drin, welchen ich damit übernommen habe.

Bitte ändere diese Zeile
$destinationPath= Join-Path (Join-Path $rootDirectory $*_.*relevantFileName) $_.Name

zu
$destinationPath= Join-Path (Join-Path $rootDirectory $relevantFileName) $_.Name

Verwende dabei die Variante von ComFreak


----------



## rloxley (6. Juni 2018)

Habe ich mir gedacht.... ;-)

SO kopiert er jetzt Dateien, ABER er lässt genau all die Dateien MIT SUFFIX aus


----------



## HonniCilest (6. Juni 2018)

Kann ich nicht nachvollziehen, mein Test hat wunderbar funktioniert.
Hast du ComFreaks Zeile angpasst?

$_.BaseName -match "^(.*?)(*-Hinz|-Kunz*)?$" | Out-Null

Bei dem fett Gedrucktem muss Natürlich -Foto1|-Foto2 stehen


----------



## rloxley (6. Juni 2018)

Du hast natürlich Recht - es funktioniert einwandfrei!  Dankeschön 

Ich hatte alle "Skriptversuche" vorsichtshalber gespeichert und offenbar doch einen Falschen "korrigiert". Nachdem ich von Grund auf neu angefangen bin, macht es auch genau was es soll )
So schnell schleichen sich Fehler ein... Entschuldige 

PS: Wenn mir eine Idee zu einem neuen Skript kommt, ist es eigentlich eher gewünscht, dafür jeweils einen eigenen thread zu eröffnen, oder? Bei mir WÜRDE es sich aber wohl fast immer auf genau diese Ausgangslage (Ordnerstruktur etc.) beziehen (ich hatte schon weit vor Anmeldung hier EINIGE Ideen, die mir bei der Arbeit sicher wieder begegnen werden), also schon zu diesem thread passen...
daher frage ich lieber vorher 

Viele Grüße und nochmal ein herzliches Dankeschön an Euch beide


----------



## HonniCilest (6. Juni 2018)

rloxley hat gesagt.:


> PS: Wenn mir eine Idee zu einem neuen Skript kommt, ist es eigentlich eher gewünscht, dafür jeweils einen eigenen thread zu eröffnen, oder?



Ich würde sagen es kommt darauf an wie alt dieser Thread dann ist und wie weit es thematisch davon abdrifted. Grundsätzlich macht es aber sicher nichts aus einen neuen Thread zu machen. Die Wahrscheinlichkeit, dass sich weitere beteiligen, ist bei einem neuen Thread höher als in diesem 3-Mann-Thread hier. Also einfach bei einem neuen möglichen Problem die Ausgangslage nochmal offen darlegen.


----------



## ComFreek (7. Juni 2018)

@HonniCilest: Danke für die Fehlerkorrektur!



rloxley hat gesagt.:


> PS: Wenn mir eine Idee zu einem neuen Skript kommt, ist es eigentlich eher gewünscht, dafür jeweils einen eigenen thread zu eröffnen, oder?


Ein Vorteil wäre sicher, dass andere Leute in die Diskussion leichter neu mit einsteigen können. Zum Beispiel habe ich diesen Thread 1-2 Tage nicht verfolgt und schon waren x Beiträge hier, die ich alle (vermeintlich?) hätte verstehen müssen, um auf den letzten Post zu antworten.
Wenn du also für neue Fragen einen neuen Thread mit wiederholter Ausgangslange (kannst du ja kopieren) aufmachst, fände ich das recht hilfreich.


----------

