Naja, du könntest schon Datei für Datei durchgehen und den Namen Zeichen für Zeichen wieder zusammen setzten so in etwa:
Code:
# pseudo code
# wird garantiert nirgendwo laufen ;)
# orientiert sich an C und PERL
# für denkfehler keine haftung
# war zu faul das wirklich zu implementieren und zu testen
$u = -1; # hilft uns die uebereinstimmungen zu zählen
$iold = -1; # hilft uns zu sehen in welchen durchlauf der letzte treffer kam so dass wir den treffer möglichst "lang" machen können
for each (@dateinamen) { # alle datei(nam)en durchgehen
for ($i = 0; $i < length($dateiname; $i++) { # $i als offset
for ($j = 0; j < length($dateiname; $i++) { # $j als länge
$k = 0; # $k zählt die treffer
for each (@dateinamen) { # alle namen durchgehen
if (strcontains($dateiname, # wenn teilstring enthalten
substring($dateiname, $i, $j))) {
$k++; # zähler hochzählen
}
}
if ($k == elements(@dateinamen) { # wenn zähler gleich anzahl dateinamen
if ($i != $iold) { # wenn neuer durchlauf
$iold = $i; # die laufnummer merken
if (! contains(@uebereinstimmungen, substring($dateiname, $i, $j))) { wenn der treffer nicht schon da ist
$u++; # und die trefferzahl um eins erhöhen
}
}
if (! contains(@uebereinstimmungen, substring($dateiname, $i, $j))) { wenn der treffer nicht schon da ist
$uebereinstimmungen[$u] = substring($dateiname, $i, $j); # treffer speichern
}
}
}
}
}
for each (@dateinamen) { # für jeden dateinamen
for each (@uebereinstimmungen) { # für jede uebereinstimmung
frename($dateiname, # datei umbenennen in dateinamen ohne den uebereinstimmenden teilstring
strpartreplace($dateiname, $ uebereinstimmung, ''));
}
}
Dann würds die allerdings gnadenlos _alle_ Übereinstimmungen raushauen, also auch z.B. wenn nur alle Dateinamen ein 'e' drinne haben wird das fliegen, oder z.B. einen Punkt. Da müsste man dann halt noch Ausnahmen oder begrenzungen einbauen. Mehrfache würden auch fliegen, also aus deinem Beispiel "datei1 - meinedatei" und "datei2 - meinedatei" würde letztlich dann "1" und "2" werden...
Lesezeichen