Wie (Teil-)Dateiname in Segmenttitel einfügen???

  • Hallo,

    ich hoffe hier im richtigen Forum gelandet zu sein. Was ich suche, ist ein Script (.bat), mit dem ich automatisiert in den Segmenttitel meiner MKVs einen Teil des Dateinamens einfügen kann.

    Ich habe einen Ordner mit mehreren MKVs:

    AAAAAA - 1080p.mkv
    BBB - 1080p.mkv
    CCCCC - 720p.mkv
    DDDDDDDD - 1080p.mkv
    EEEEEE - 720p.mkv
    ...

    Jetzt soll durch ein Batch-Script der Dateiname, bzw. ein Teil des Dateinamens in den Segmenttitel eingefügt werden. Und zwar so:

    AAAAAA
    BBB
    CCCCC
    DDDDDDDD
    EEEEEE

    Also ohne ".mkv" und ohne " - 1080p" bzw. " - 720p"

    Wie bekomme ich das hin?

    Danke im Voraus ...

  • Ähm, ich möchte NICHT die Dateien umbenennen, sondern deren Segmenttitel in den MKVs. Das geht mit MKVPropEdit - allerdings müsste man das per Batch lösen, da ich mehrere Dateien in einem Rutsch bearbeiten möchte ...

  • Anscheinend geht das doch nicht so einfach mit "FOR /F", Tokens und delims= ... man kann das Trennzeichen für die Dateinamensabschnitte nicht auf eine ganze Zeichenfolge festlegen (so wie bei explode() in PHP).

    Da wird dir wohl nur übrig bleiben, die Dateinamensverarbeitung in einer mächtigeren Programmiersprache (wie AutoIt?) durchzuführen und mit dem Ergebnis jeweils einen der MKV-Property-Editoren aufzurufen.

  • Für Batch ist das größte Problem das hängende Leerzeichen vor dem Minus. Vielleicht stört das im Titel nicht, aber ordentlich ist anders. Also muss on the fly eine Variable erzeugt, bearbeitet und wieder gelöscht werden. Die Kommandozeile für die "Eingabeaufforderung" sieht so aus:

    Code
    for %a in (*.mkv) do @for /f "delims=-" %b in ("%~a") do @set ".%~b=%~b"&for /f "delims=" %c in ('call echo "%.%~b:~0,-1%"') do @mkvpropedit "%~a" --set title="%~c"&set ".%~b="


    Have fun.

  • Bin doch nochmal da. Also, wie gesagt, es muss auch kein Batch sein. Es sollte halt irgendwie klappen. Ich hab auch grade gemerkt, dass da noch ein anderes Problem ist. Und zwar:

    Es gibt auch Dateien, die wie folgt aussehen: AAAAA - BBBBB - 720p.mkv

    Also noch ein " - " mehr.

    Meine Frage daher, kann man nich von hinten her suchen? Also: Suche von rechts nach "-", zähle Zeichen nach diesem "-", addiere 2 Zeichen hinzu und entferne dann diese Anzahl an Zeichen?

    Okay, vielleicht ist das nicht per Batch möglich, aber irgendwie muss es doch gehen, oder?

    Natürlich verlange ich jetzt nicht, dass Ihr mir da ein Programm schreibt, aber vielleicht einen Tipp, wie man so etwas angehen könnte ...

  • In PHP gäbe es geeignete Funktionen, z.B. $chunks = explode(" - ", $basename) zerlegt den Dateinamen (den man auch leicht von Erweiterungen befreien kann) in ein Array aus Teilen, die von der Trennzeichenkette getrennt wurden. Wenn es mehrere gab, hat das Array eben mehr Elemente. Dann lässt sich nur das letzte Element entfernen, wie bei der Stapelverarbeitung (push/pop) mit array_pop($chunks); die übrigen Teile setzt man mit implode(" - ", $chunks) wieder zusammen.

    Möglicherweise können einige andere Sprachen ähnliches, aber sicher nicht alle. Die müsste dann "von rechts suchen" können; oder man zählt so lange von links hinter der letzten gemerkten Position und merkt sich die neue Position, bis man nichts mehr findet, dann ist die letzte gemerkte Position die des letzten " - ".

  • Das schneidet einfach nur die letzten X Zeichen weg:

  • Ok, ich hab es jetzt noch nicht getestet, aber ein paar Fragen:

    Ich speichere diesen Code im gleichen Ordner wie die MKVs als .bat ab? Das hieße, dass ich die .bat in jedem Ordner ausführen müsste?

  • Du kannst sie auch da abspeichern, wo sie gefunden wird (also bevorzugt in einem Ordner, der in %PATH% enthalten ist, evtl. mit bei mkvtoolnix), oder sie mit vollem Pfad aufrufen.

    Wenn du die Batchdatei auch in einer Schleife in allen Unterverzeichnissen eines Basisverzeichnisses ausführen lassen willst, kannst du sicher zusätzlich eine Batch-Datei schreiben, die per FOR-Schleife und mit Klammer-Gruppe in jedes Unterverzeichnis wechselt, dort die Batch von sneaker2 mittels CALL aufruft (so wird nur eine cmd.exe ausgeführt) und wieder den Pfad zurückgeht (CD ..).

    Hättest du das gleich gesagt, dass nicht alle MKVs in einem Verzeichnis liegen, hätte sneaker2 das vielleicht auch gleich berücksichtigt... :seher:

  • Das ist ja auch nicht so wichtig. Hatte mal eine Batch gefunden, da hat man die Dateien einfach draufgezogen. Aber, wie gesagt, ist nicht so wichtig. Mir geht es mehr ums Verständnis ...

  • Das könnte man sicher auch so hinkriegen, dass man da Verzeichnisse aus dem Explorer auf die Batch ziehen kann. Falls dabei der Verzeichnisname übergeben wird, dürfte ein CD /d "%1" am Anfang reichen.

    Aber "wir Entwickler" sind es halt noch gewohnt, gleich an der Eingabeaufforderung zu arbeiten, wenn wir schon mal da sind (und Batch-Dateien sind davon nicht weit weg). Und wer noch alt genug ist, den Norton Commander verwendet zu haben, der navigiert mit Nachfolgern wie dem "Far manager" mit Sicherheit ohne Maus um ein Vielfaches schneller durch den Wald an Dateien, Verzeichnissen und Laufwerken bzw. Partitionen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!