Rename Script für Serien

  • Moin Moin, habe heute mal ein kleines Script geschrieben was #avi mkv und sonstige Dateien umbennent also kurze Erklärung

    Script wird gestartet
    > Ordner auswählen in der die Dateien gesucht und umbennant werden sollen
    > Script startet und sucht alle im Kopf angegebenen Dateitypen
    > Script bennent die Dateien um wie den darübergeordneten Ordner, die Dateiendung wird beibehalten

    Wofür braucht man dass? , Stichwort : Serien

    Achso, habe das ganze auch noch für das ändern von Ordnern gemacht, in denen Oft CrewNamen Releasedates und sonstiger Müll vorhanden ist, dieses Script muss man sich natürlich anpassen auf seine Bedürfnisse
    Rename Folders:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <File.au3>

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

    Global $Folder = FileSelectFolder("Bitte Ordner auswählen",@ComputerName)
    If @error Then Exit(MsgBox(64,"Keinen Ordner ausgewählt","Script wird nun beendet"))
    Global $FolderList = _FileListToArray($Folder,"*",2)
    Global $Strip, $NewFolderName, $x = 1, $Source , $Dest

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

    For $i = 1 To UBound($FolderList)-1
    $Strip = StringSplit($FolderList[$i],'.')
    $NewFolderName = ''
    For $p = 1 To UBound($Strip)-1
    If $Strip[$p] = 'German' Then ExitLoop
    $String = $Strip[$p]&' '

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

    $NewFolderName = $NewFolderName&$String
    If $p = 3 Then $NewFolderName = $NewFolderName&'- '
    Next
    $NewFolderName = StringTrimRight($NewFolderName,1)
    $Source = $Folder&'\'&$FolderList[$i]
    $Dest = $Folder&'\'&$NewFolderName&'\'
    FileMove($Source,$Dest,9)
    DirRemove($Source)
    Next

    [/autoit]

    RenameVideos

    Spoiler anzeigen
    [autoit]


    #include<Array.au3>

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

    Global $FolderSelect = FileSelectFolder("Bitte Ordnerstamm auswählen",@ComputerName)
    Global $aEndungen[5] = ['','.avi' ,'.mkv','.flv','.mp4'], $Split
    Global $AllFiles[500][UBound($aEndungen)-1]
    If @error Then Exit(MsgBox(64,"Keinen Ordner ausgewählt","Script wird nun beendet"))

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

    For $i = 1 To UBound($aEndungen)-1
    $FileList = _GetFilesFolder_Rekursiv($FolderSelect, $aEndungen[$i],0,1)
    $Split = StringSplit($FileList,@CRLF,1)
    _Copy2Array($AllFiles,$Split,$i-1)
    Next
    _RenameFiles($AllFiles)
    Func _Copy2Array(ByRef $AllFiles,$Array2Copy,$Dimension)
    For $i = 1 To UBound($Array2Copy)-1
    $AllFiles[$i][$Dimension] = $Array2Copy[$i]
    Next
    EndFunc

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

    Func _RenameFiles(ByRef $AllFiles)
    Local $StripFolderName, $StripDataFormat, $Strip, $Surce, $Dest, $NewDataName
    For $i = 0 To UBound($AllFiles,2)-1
    For $x = 1 To UBound($AllFiles)-1
    If $AllFiles[$x][$i] = '' Then ExitLoop
    $Source = $AllFiles[$x][$i]
    $Strip = StringSplit($AllFiles[$x][$i],'\',1)
    $StripDataFormat = StringRight($AllFiles[$x][$i],4)
    ;ConsoleWrite("DEBUG: "& "ORDNER: "&$StripFolderName & ' FORMAT: ' & $StripDataFormat&@CRLF)
    $StripFolderName = $Strip[UBound($Strip)-2]
    $NewDataName = $StripFolderName&$StripDataFormat
    $New = StringReplace($AllFiles[$x][$i],$Strip[UBound($Strip)-1],$NewDataName)
    FileMove($Source,$New)
    Next
    Next
    EndFunc

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

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


    Gruß Marvin

  • hm also das klappt irgendwie nicht so oder ich verstehs nicht ganz was es tun soll :D

    also habe einen Ordner Serie in dem unterordner zu Episode1..x sind in welchen dann mkv dateien liegen.
    Also:
    +Serie[Ordner]
    ___+Episode1[Ordner]
    ______asgd.mkv
    ___+Episode2[Ordner]
    ______asfd3d.mkv

    Nun wähle ich den Serie Ordner aus und er sollte doch die mkv's dann in Episode1...x umbennenen? tut er aber nicht, er tut gar nichts so wie ich das sehe.

    Aber ich versteh auch den Sinn nicht so ganz, warum sollte ich die mkv's alle in unterordnern haben, eher doch Ordner Serie in dem dann die .mkv's direkt liegen, und dann bennent das skript das erste file um, aber versucht die anderen files gleich zu nennen was ja nicht geht ;)

    Oder versteh ich das ganz falsch xD

  • Moin, ich habe das Script geschrieben für eine Andere Art von Ordnerstruktur und zwar

    Serien[Ordner]
    <SerienName> [Ordner]
    <Staffel 1> [Ordner]
    <<Serienname.S01E01.German.Crewname.sonstwas.xvid>[Ordner]
    <SerienDatei mit Crew informationen und sonsitgem Unsinnigen Müll>
    <Nächste Ordner für die nächste Folge>
    <Nächste Video Datei>
    ......
    und das Scirpt schneidet aus dem Orndernamen einfach die Unnötigen Crew infos aus und Formatiert dir den Ordnernamen & dann die untergeordneten Serienfolgen dass es später so in etwa aussieht

    Serien[Ordner]
    <SerienName> [Ordner]
    <Staffel 1> [Ordner]
    <<Serienname S01E01 - Name der Folge>[Ordner]
    <SerienName S01E01 - Name der Folge.Dateiformat>
    <Nächste Ordner für die nächste Folge>
    <Nächste Video Datei>

    Gruß Marvin

  • wäre es auch möglcih das so zu machen?

    Ordner Serienname z.b Leverage
    ->Ordner Staffelname z.b S01, S02,S03
    -->Ordnername Episode Leverage.S03E01.Hinter.Gittern.German.Dubbed.DVDRip.XviD-ITG
    --->Dateiname soll dann Leverage.S03E01.Hinter.Gittern.German.Dubbed.DVDRip.XviD-ITG.avi

    so soltle es dann fertig aussehen:
    im ordner Leverage/S03/Leverage.S03E01.Hinter.Gittern.German.Dubbed.DVDRip.XviD-ITG.avi

    Evtl noch den restlichen müll löschen!

  • Sollten beide bei dir Laufen, zuerst RenameFolder auf jeden StaffelOrdner einzeln, habe in diesem Script keine RekursiveSuche eingebaut, dann auf den Sierienordner "Leverage" dass RenameVideos script ausführen

    Fertig

    Gruß Marvin