Filename kürzen

  • Hallo zusammmen,

    Würde ganz gerne ein skript schreiben um vorhandene Dateinamen automatisch zu kürzen.

    Bei mir erzeugt die Dreambox immer sehr lange Dateinamen.
    Die sehen in etwa so aus:
    20091031 2015 - Sky Cinema HD - Michael Clayton
    Ich möchte nun, dass alles vor dem Filmnamen gelöscht wird.
    Bei diesem Beispiel sollte das Ergebnis so sein: Michael Clayton.
    Es müsste also immer alles bis direkt zum zweiten "-" gelösct werden.

    Wie müsste da das Skript aussehen, habe schon überall gesucht, aber nichts so richtig gefunden....

    Vielen Dank
    beginner73

  • Ich denke BugFix meinet mit der Occurnce eher StringInStr.
    Für StringSplit würde ich

    [autoit]

    $var = "20091031 2015 - Sky Cinema HD - Michael Clayton"
    $a = StringSplit($var,"-")
    MsgBox(0, '', $a[$a[0]])

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • OK, erstamal danke für die Antworten.

    Wie muß ich das denn nun machen?
    Ich habe viele Aufnahmen in einem Ordner, die umbenannt werden sollen.
    Muß ich eure Vorschläge einfach in ein skript kopieren und dieses dann starten?

    Laßt mich doch bitte nicht dumm sterben ;)

    Grüße
    beginner73

  • Versuch es mal hiermit:

    [autoit]


    #include <File.au3>

    [/autoit][autoit][/autoit][autoit]

    $sOrdnerPfad = "C:\Desktop\" ; Pfad zu deinem Ordner mit den Filmen -> Endung muss \ sein

    [/autoit][autoit][/autoit][autoit]

    Global $aFiles = _FileListToArray($sOrdnerPfad)

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($aFiles)
    $sNewFileName = StringTrimLeft($aFiles[$i], StringInStr($aFiles[$i], '-', 1, -1) + 1)
    FileMove($sOrdnerPfad & $aFiles[$i],$sOrdnerPfad & $sNewFileName,1)
    Next

    [/autoit]
  • Hallo beginner73,

    Zitat

    Würde ganz gerne ein skript schreiben um vorhandene Dateinamen automatisch zu kürzen.

    Deine Aussage wurde von uns so genommen, wie sie da steht ;)

    D.h. nachdem Du Dein Script selber schreiben möchtest, geben wir nur Hinweise wie Du das umsetzen kannst.

    Zitat

    Muß ich eure Vorschläge einfach in ein skript kopieren und dieses dann starten?

    Laßt mich doch bitte nicht dumm sterben ;)

    Daher kannst Du eigentlich nicht davon ausgehen, dass wir fertige Lösungen posten.
    Zumal wir nur wenig Input bekommen haben.
    I.d.R. stellt der Fragende sein Script ein, mit dem er Probleme hat, und wir geben Vorschläge zur Lösung/Verbesserung...

    In diesem Sinne ...

    bis zum nächsten Script :D

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • OK, fürs nächste mal weiß ich besser bescheid....

    nun habe ich habe ein kleines Problem mit den Skript oben.
    (Besten dank an dieser Stelle noch mal)
    Wenn ich das Skript einmal durlaufen lasse, werden alle Dateien richtig gekürzt.
    Nun kommen aber immer neue Dateien dazu.
    Wenn ich nun das Skript wieder laufen lasse, werden alle schon gekürzten Dateien gelöscht :(
    Was muß ich ändern, damit die schon gekürzten Dateien unverändert bleiben?

    Grüsse
    beginner

  • gibts da keine andere Lösung?
    Dann ist die Ordner struktur auf meiner Dream wieder so groß..... für alles 2 Ordner (gekürzt, nicht gekürzt)

  • Hallo,

    sollte aber eigentlich immer so funktionieren, wenn Du mit den bisherigen Vorschlägen arbeitest.
    Beim 2. Auftreten des "-" (occurence =-1) wird der String Dateiname um alles vor dem "-" inklusive dessen gekürzt.
    Selbst bei einem zweiten Durchlauf sollten die Dateinamen erhalten bleiben, da imho kein "-" mehr vorhanden ist und deshalb nichts automatisiert gelöscht werden dürfte. Andernfalls ließe sich Zeichen um Zeichen durch den Dateinamen iterieren , um die Position des "-" zu bestimmen und anschließend den String um die Anzahl Zeichen vom Beginn der Zeile bis zum Leerzeichen hinter dem zweiten "-" zu bestimmen. Danach lässt sich der String mit StringLeft oder StringRight zurechtschneiden. Viel Erfolg

    Gruß

    gnArfL

  • Hallo beginner73,

    nachdem wir von Deinem Problem weiterhin kein Script sehen, muss ich halt weiter raten. ;)

    Ich würde die Dateinamen prüfen, ob der Ergebnisstring ein Array ist, das würde bedeuten dass in dem Dateinamen ein "-" gefunden wurde.
    Kannst natürlich auch anderweitig die Dateinamen prüfen. Es bietet sich halt an, da Du ja sowieso splittest.

    [autoit]

    $var = "20091031 2015 - Sky Cinema HD - Michael Clayton"
    $a = StringSplit($var,"-")
    If IsArray($a) Then ; prüft, ob $a ein Array ist, wenn ja, dann wurde im String (Dateinamen) ein "-" gefunden
    ;hier die Befehle zum Umbenennen hinein, wenn die Bedingung nicht zutrifft, wird auch nichts gemacht
    EndIf

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Also mein Skript sieht so aus.
    Habe es wie vorgeschlagen übernommen.
    Manchmal werden beim zweiten durchlauf die Filenamen auch nur in sich nochmal gekürzt.


    [autoit]

    #include <File.au3>

    [/autoit][autoit][/autoit][autoit]

    $sOrdnerPfad = "Y:\Filme\" ; Pfad zu deinem Ordner mit den Filmen -> Endung muss \ sein

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $aFiles = _FileListToArray($sOrdnerPfad)

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($aFiles)
    $sNewFileName = StringTrimLeft($aFiles[$i], StringInStr($aFiles[$i], '-', 1, -1) + 1)
    FileMove($sOrdnerPfad & $aFiles[$i],$sOrdnerPfad & $sNewFileName,1)
    Next

    [/autoit]
  • Kann man den Dateinamen nicht einfach per RegExp ändern?
    Das verhindert dann auch dass Dateien mehrfach gekürzt werden (im prinzip)

    [autoit]

    $sNewFileName = StringRegExpReplace($aFiles[$i],"^[\d\s]+- ?","")

    [/autoit]

    /EDIT Hier noch ein Beispiel:

    Spoiler anzeigen
    [autoit]

    $sString = "20091031 2015 - Sky Cinema HD - Michael Clayton"

    [/autoit] [autoit][/autoit] [autoit]

    $sString = StringRegExpReplace($sString,"^[\d\s]+- ?","")
    MsgBox(0,"1 Replace",$sString)
    $sString = StringRegExpReplace($sString,"^[\d\s]+- ?","")
    MsgBox(0,"2 Replace",$sString)
    $sString = StringRegExpReplace($sString,"^[\d\s]+- ?","")
    MsgBox(0,"3 Replace",$sString)

    [/autoit]

    Der Name bleibt nach dem 1 Replace immer gleich (weil das suchmuster n icht gefunden wird). Das ganze kann man dann nach belieben anpassen

  • Das ganze betrifft halt nicht nur ein Ordner.
    Ich habe für jedes Familienmitglied einen Aufnahmeordner erstellt.
    Wenn nun ein Timer auf der DM8000 gesetzt wird, kann sofort der Ziehlordner angegeben werden.
    Daher möchte ich halt nicht jeweils 2 Ordner anlegen.

    Gruß
    beginner

  • ]Hallo,


    was kann ich denn machen, wenn nun 2 identische File Namen erzeugt werden?
    Z.B. Aufnahme einer Serie, ergibt ja immer den gleichen Namen der Datei.
    in dem Script wie oben, werden doppelte File Namen einfach entfernt :(


    [autoit]

    #include <File.au3>

    [/autoit][autoit][/autoit][autoit]

    $sOrdnerPfad = "Y:\Test2\" ; Pfad zu deinem Ordner mit den Filmen -> Endung muss \ sein

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $aFiles = _FileListToArray($sOrdnerPfad)

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($aFiles)
    $sNewFileName = StringRegExpReplace($aFiles[$i],"^[\d\s]+- ?","")
    FileMove($sOrdnerPfad & $aFiles[$i],$sOrdnerPfad & $sNewFileName,1)
    Next

    [/autoit]

    Einmal editiert, zuletzt von beginner73 (31. Mai 2010 um 16:54)

  • Du könntest immer eine fortlaufende Nummer an den Dateinamen anhängen. Diese Funktionen nutze ich in meinem CSV-Editor für Backup-Zwecke.

    Spoiler anzeigen
    [autoit]

    $DateiName = @ScriptDir & "\Serie_1.mpg"

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite("Originaltitel: " & $DateiName & @CR)
    ConsoleWrite("Backuptitel: " & _FileGetNextBackup($DateiName) & @CR)

    [/autoit] [autoit][/autoit] [autoit]

    Func _FileGetNextBackup($sFile)
    ;funkey 2010, April, 02
    Local $NextFile
    Local $sExt = _FileGetExt($sFile)
    For $i = 1 To 999
    $NextFile = StringFormat(StringTrimRight($sFile, StringLen($sExt)) & "(%003i)." & $sExt, $i)
    If Not FileExists($NextFile) Then ExitLoop
    Next
    Return $NextFile
    EndFunc ;==>_FileGetNextBackup

    [/autoit] [autoit][/autoit] [autoit]

    Func _FileGetExt($sFileName)
    Local $sExt = StringTrimLeft($sFileName, StringInStr($sFileName, ".", 0, -1))
    If StringInStr($sExt, "\") Or StringInStr($sExt, "/") Then Return "" ;no extension
    Return $sExt
    EndFunc ;==>_FileGetExt

    [/autoit]
  • äh, welche zeile muss ich denn dann übernehmen/ändern?
    bei mir kommt nichts "raus"....

  • So. Ungetestet.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sOrdnerPfad = "Y:\Test2\" ; Pfad zu deinem Ordner mit den Filmen -> Endung muss \ sein

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $aFiles = _FileListToArray($sOrdnerPfad)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aFiles)
    $sNewFileName = StringRegExpReplace($aFiles[$i], "^[\d\s]+- ?", "")
    FileMove($sOrdnerPfad & $aFiles[$i], $sOrdnerPfad & _FileGetNextBackup($sNewFileName), 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _FileGetNextBackup($sFile)
    ;funkey 2010, April, 02
    Local $NextFile
    Local $sExt = _FileGetExt($sFile)
    For $i = 1 To 999
    $NextFile = StringFormat(StringTrimRight($sFile, StringLen($sExt)) & "(%003i)." & $sExt, $i)
    If Not FileExists($NextFile) Then ExitLoop
    Next
    Return $NextFile
    EndFunc ;==>_FileGetNextBackup

    [/autoit] [autoit][/autoit] [autoit]

    Func _FileGetExt($sFileName)
    Local $sExt = StringTrimLeft($sFileName, StringInStr($sFileName, ".", 0, -1))
    If StringInStr($sExt, "\") Or StringInStr($sExt, "/") Then Return "" ;no extension
    Return $sExt
    EndFunc ;==>_FileGetExt

    [/autoit]

    Edit: Die Zeile sollte so sein, sorry!

    [autoit]

    FileMove($sOrdnerPfad & $aFiles[$i], _FileGetNextBackup($sOrdnerPfad & $sNewFileName), 1)

    [/autoit]