Dateien sortieren nach bestimmter Stelle im Namen

German support forum

Moderators: sheep, Hacker, Stefan2, white

Post Reply
ukatenbr
Junior Member
Junior Member
Posts: 5
Joined: 2007-03-13, 19:34 UTC

Dateien sortieren nach bestimmter Stelle im Namen

Post by *ukatenbr » 2010-01-14, 16:54 UTC

Hallo,
ein tolles Programm, welches ich schon lange nutze ist der Total Commander. Ich möchte es nicht missen.

Folgende Frage:
ich möchte Dateinamen sortieren, die eine gleiche Struktur aufweisen:

beispielsweise:

xxxxyyzzz.xyz

Ist es möglich, die Dateien nach den ersten 4 Stellen (xxxx) oder nach der 5. und 6. Stelle (yy) oder nach der 7., 8. und 9. Stelle (zzz) zu sortieren.

Ich habe mehrere Dateinamen, die eine laufende Nummer und einen Titel beinhalten und diese mal nach den Nummern und mal nach alphabetischer Reihenfolge der Titel sortieren lassen.

Vielen Dank für eventuelle Tipps.

Gruß,
Uwe

User avatar
van Dusen
Power Member
Power Member
Posts: 683
Joined: 2004-09-16, 19:30 UTC
Location: Sinzig (Rhein), Germany

Post by *van Dusen » 2010-01-15, 12:24 UTC

Hallo ukatenbr,

um die Dateiliste nach Teilstrings der Dateinamen sortieren zu können, musst Du eine benutzerdefinierte Spaltenansicht anlegen und dort für jeden "Ausschnitt" des Dateinamens eine Spalte konfigurieren. Mit TC-Bordmitteln lassen sich in benutzerdefinierten Spalten zwar Teilstrings darstellen (z.B. Feldinhalt: [=tc.Name:5-6], um die 5-6 Stelle des Dateinamens zu extrahieren), sortiert wird aber dennoch nach dem vollständigen Feldwert. Diese Methode ist für Sortierzwecke also ungeeignet. Lösen lässt sich das Problem mit Plugins, die Teilstrings aus Dateinamen extrahieren können. Hier nur drei Möglichkeiten:


1. wdx_filesys
Nach Installation des Plugins in Deiner benutzerdefinierten Spaltenansicht folgende Spalten einrichten:
Feldinhalt: [=filesys.CutNameStart.4] => Schneidet die ersten 4 Zeichen des Dateinamens ab, liefert also den Dateinamen ab Stelle 5
Feldinhalt: [=filesys.CutNameStart.6] => Schneidet die ersten 6 Zeichen des Dateinamens ab, liefert also den Dateinamen ab Stelle 7


2. regexp_wdx 0.1.0.4
Nach Installation des Plugins regexp.ini editieren...

Code: Select all

[Regexp] 
Rule=Teilstring

[Teilstring] 
Find="(.{4})(.{2})(.{3})"
;Change="$1"
Change="$2"
;Change="$3"
Others=0
...und eine benutzerdefinierte Spalte mit Feldinhalt: [=regexp.Result] anlegen.

Dies liefert den Teilstring 5-6 zurück; um den Teilstring 7-9 zu erhalten, Zeile Change="$2" auskommentieren und das ";" vor Zeile ;Change="$3"entfernen. Alternativ: Plugin zweimal unter unterschiedlichem Namen installieren und registrieren. Mit der folgenden, dritten Möglichkeit (Script Content Plugin) lassen sich bis zu 10 Ergebnisse (Teilstrings) gleichzeitig ermitteln.


3. Script Content Plugin 0.2.0.0
Nach Installation des Plugins im Installationsverzeichnis des Plugins eine Datei namens SplitFilenameRegExp.vbs mit folgendem Inhalt anlegen:

Code: Select all

'*** SplitFilenameRegExp.vbs, V1.0, 2009-06-25, van Dusen
'*** Script for Script Content Plugin 0.2
'*** Lev Freidin (c) 2005-2008
'*** http://www.totalcmd.net/plugring/script_wdx.html
'*** http://wincmd.ru/plugring/script_wdx.html

Dim vResult(9)
For i = 0 To 9
	vResult(i) = ""
Next

Dim oRegExp, oMatch, oMatches
Set oRegExp = New RegExp
'oRegExp.Pattern = "(.+) - (.+) - (.+)\..*"
'oRegExp.Pattern = "(.{4})(.{2})(.{3})(.*?)\.(.*)"
oRegExp.Pattern = "(.{4})(.{2})(.{3})(.*)\.(.*)"
oRegExp.IgnoreCase = True
oRegExp.Global = True

If oRegExp.Test(filename) Then
   Set oMatches = oRegExp.Execute(filename)
   Set oMatch = oMatches(0)
   For i = 0 To oMatch.SubMatches.Count - 1
	   vResult(i) = oMatch.SubMatches(i)
   Next
End If

content  = vResult(0)
content1 = vResult(1)
content2 = vResult(2)
content3 = vResult(3)
content4 = vResult(4)
content5 = vResult(5)
content6 = vResult(6)
content7 = vResult(7)
content8 = vResult(8)
content9 = vResult(9)
Anschließend die script.ini editieren:

Code: Select all

[Script]
Section=SplitFilenameRegExp

[SplitFilenameRegExp]
LongName=0
ParseDirs=1
Script=SplitFilenameRegExp.vbs
Und zuletzt benutzerdefinierte Spalten mit Feldinhalt: [=script.Result], [=script.Result1], [=script.Result2], ..., [=script.Result9] anlegen.

ukatenbr
Junior Member
Junior Member
Posts: 5
Joined: 2007-03-13, 19:34 UTC

Post by *ukatenbr » 2010-01-17, 11:15 UTC

Vielen Dank für die Info. Ich werde das gleich mal ausprobieren.

Uwe

Post Reply