Warez - Renamer (Massen Rename Tool)

  • Hey =)

    möchte hier mal mein erstes, komplett selbstgeschriebenes Tool
    reinstellen =)

    Damit kann man viele Datein (und dazuwählbar Ordner) auf einen Schlag umbennen.
    Das Tool unterstützt bestimmte längen der Dateinamen links und rechts wegzuschneiden,
    bis zu einem bestimmten String oder Zeichen alle Zeichen abzuschneiden,
    Zeichen zu ersetzen per Liste (in Dateiform) oder Zeichen bzw Zeichenketten komplett
    wegzuschneiden.

    Feedback wäre gut.

    (Ich weis das es sowas vllt schon giebt,
    auch das es sowas vllt schon besser giebt
    aber das is kein Grund hier rumzuflamen, danke)

    Link

    Zitat


    Passwort

    Zitat

    Nachid

    Feedback nicht vergessen ;)


    Da öfters nach dem Code gefragt wurde :

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=wricon.ico
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Description=Renamer Programm by Nachid
    #AutoIt3Wrapper_Res_Fileversion=1.0.1.3
    #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=p
    #AutoIt3Wrapper_Res_LegalCopyright=(C) by Nachid
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_res_requestedExecutionLevel=requireAdministrator
    #AutoIt3Wrapper_Run_Tidy=y
    #AutoIt3Wrapper_Tidy_Stop_OnError=n
    #AutoIt3Wrapper_Run_Obfuscator=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.6.1
    Author: myName

    Script Function:
    Template AutoIt script.

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here
    #include <GUIConstantsEx.au3>
    #include <File.au3>
    #include <Array.au3>
    If $CmdLine[0] = 1 Then
    If $CmdLine[1] = "source" Then
    FileInstall("Warez-Rename.au3", @ScriptDir & "\Warez-Rename(source).au3", 1)
    EndIf
    EndIf
    If $CmdLine[0] = 3 Then
    FileMove($CmdLine[2], $CmdLine[3])
    Exit (1)
    EndIf
    FileInstall("nachid.jpg", @TempDir & "\Nachid", 1)
    SplashImageOn("Loading", @TempDir & "\Nachid", 337, 141, @DesktopWidth / 2 - 165, @DesktopHeight / 2 - 70, 1)
    Sleep(3000)
    SplashOff()
    GUICreate("Warez- Renamer", 300, 200)
    GUICtrlCreateLabel("Pfad", 5, 10, 120, 20)
    GUICtrlSetFont(-1, 11, 550)
    $gefunden = GUICtrlCreateLabel("Gefunden : 0 Daten", 100, 5, 120, 20)
    $path = GUICtrlCreateInput("", 5, 30, 200, 20)
    $spath = GUICtrlCreateButton("....", 205, 30, 45, 20)
    $input = GUICtrlCreateInput("Input", 5, 60, 200, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $todo = GUICtrlCreateCombo("Optionen", 5, 90, 200, 20)
    GUICtrlSetData(-1, "Vorne abschneiden|Hinten abschneiden|Abschneiden bis..|Ersetze|Entferne")
    $allfiles = GUICtrlCreateCheckbox("Alle Daten in allen Unterordnern finden ?", 5, 120, 210, 20)
    $folders = GUICtrlCreateCheckbox("Ordner umbenennen ?", 5, 140, 150, 20)
    $backup = GUICtrlCreateCheckbox("Backupdatei erstellen ?", 5, 160, 210, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $percent = GUICtrlCreateProgress(5, 180, 290, 20)
    $go = GUICtrlCreateButton(" ! GO ! ", 210, 140, 80, 20)
    GUISetState()
    Global $filelist
    Global $rename
    Global $isfolder
    Global $folder2rename
    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit (1)
    If $msg = $spath Then
    GUICtrlSetData($path, FileSelectFolder("Ordner suchen...", "", 5))
    EndIf
    If $msg = $todo Then
    $dump = GUICtrlRead($todo)
    Select
    Case $dump = "Optionen"
    GUICtrlSetState($input, $GUI_DISABLE)
    GUICtrlSetData($input, "Input")
    Case $dump = "Vorne abschneiden" Or $dump = "Hinten abschneiden"
    GUICtrlSetState($input, $GUI_ENABLE)
    GUICtrlSetData($input, "Wie viele Buchstaben ?")
    Case $dump = "Abschneiden bis.."
    GUICtrlSetState($input, $GUI_ENABLE)
    GUICtrlSetData($input, "")
    MsgBox(36, "Hilfe", "Die Funktion Abschneiden bis.. schneidet alle Zeichen bis zu dem Xten Vorkommen " & @CRLF & _
    "eines gegeben Zeichens ab. Der Befehl ist wie folgt aufgebaut : " & @CRLF & @CRLF & _
    "Zeichen|Vorkommen" & @CRLF & _
    "Beispiel : a|1")
    Case $dump = "Ersetze"
    GUICtrlSetData($input, FileOpenDialog("Liste", @ScriptDir, "Warez - Rename (*.*)"))
    Case $dump = "Entferne"
    GUICtrlSetState($input, $GUI_ENABLE)
    GUICtrlSetData($input, "Zu entfernen, mit | Zeichen trennen")
    EndSelect
    EndIf
    If $msg = $go Then
    If GUICtrlRead($allfiles) = 4 And GUICtrlRead($folders) = 1 Then
    $filelist = _FileListToArray(GUICtrlRead($path))
    For $i = 1 To $filelist[0] Step +1
    If StringRight(GUICtrlRead($path), 1) = "\" Then
    $filelist[$i] = GUICtrlRead($path) & $filelist[$i]
    Else
    $filelist[$i] = GUICtrlRead($path) & "\" & $filelist[$i]
    EndIf
    Next
    EndIf
    If GUICtrlRead($allfiles) = 4 And GUICtrlRead($folders) = 4 Then
    $filelist = _FileListToArray(GUICtrlRead($path), "*", 1)
    For $i = 1 To $filelist[0] Step +1
    If StringRight(GUICtrlRead($path), 1) = "\" Then
    $filelist[$i] = GUICtrlRead($path) & $filelist[$i]
    Else
    $filelist[$i] = GUICtrlRead($path) & "\" & $filelist[$i]
    EndIf
    Next
    EndIf
    If GUICtrlRead($allfiles) = 1 Then
    $filelist = _FileListToArray(GUICtrlRead($path))
    For $i = 1 To $filelist[0] Step +1
    If StringRight(GUICtrlRead($path), 1) = "\" Then
    $filelist[$i] = GUICtrlRead($path) & $filelist[$i]
    Else
    $filelist[$i] = GUICtrlRead($path) & "\" & $filelist[$i]
    EndIf
    Next
    ;Rekursives durchsuchen
    $i = 1
    Do
    If StringInStr(FileGetAttrib($filelist[$i]), "D") Then
    $dump = _FileListToArray($filelist[$i])
    If Not @error Then
    For $x = 1 To UBound($dump, 1) - 1 Step +1
    _ArrayAdd($filelist, $filelist[$i] & "\" & $dump[$x])
    Next
    EndIf
    EndIf
    $i = $i + 1
    GUICtrlSetData($gefunden, "Gefunden : " & UBound($filelist, 1) - 1 & " Daten")
    Until $i = UBound($filelist, 1)
    ;ENDE

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

    EndIf
    Dim $rename[UBound($filelist)]
    $dump = GUICtrlRead($todo)
    Select
    Case $dump = "Vorne abschneiden"
    cutv(GUICtrlRead($folders), GUICtrlRead($input))
    Case $dump = "Hinten abschneiden"
    cuth(GUICtrlRead($folders), GUICtrlRead($input))
    Case $dump = "Abschneiden bis.."
    cutto(GUICtrlRead($input))
    Case $dump = "Ersetze"
    If FileExists(GUICtrlRead($input)) Then replace(GUICtrlRead($input))
    Case $dump = "Entferne"
    entf(GUICtrlRead($input))
    EndSelect

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

    EndIf
    If Not @Compiled Then _SelfKill()
    WEnd

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

    Func entf($tokill)
    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    If $get[2] = 0 Then
    $var = StringSplit($tokill, "|")
    If $var > 2 Then
    For $x = 1 To UBound($var, 1) - 1 Step +1
    $get[1] = StringReplace($get[1], $tokill, "")
    Next
    $rename[$i] = $get[0] & $get[1] & $get[3]
    Else
    $rename[$i] = $get[0] & StringReplace($get[1], $tokill, "") & $get[3]
    EndIf
    EndIf
    Next
    _renamefile()
    If GUICtrlRead($backup) = 1 Then $backupvar = _backup()

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

    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    If $get[2] = 1 Then
    $var = StringSplit($tokill, "|")
    If $var > 2 Then
    For $x = 1 To UBound($var, 1) - 1 Step +1
    $get[1] = StringReplace($get[1], $tokill, "")
    Next
    Else
    $rename[$i] = $get[0] & StringReplace($get[1], $tokill, "") & $get[3]
    EndIf
    Else
    $rename[$i] = ""
    EndIf
    Next
    _renamefolder()
    If GUICtrlRead($backup) = 1 Then _backup($backupvar)
    EndFunc ;==>entf

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

    Func replace($torep)
    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    Dim $lines
    $count = _FileReadToArray($torep, $lines)
    If $get[2] = 0 Then
    For $x = 1 To UBound($lines, 1) - 1 Step +1
    $var = StringSplit($lines[$x], ":")
    If UBound($var, 1) > 2 Then
    $rename[$i] = $get[0] & StringReplace($get[1], $var[1], $var[2]) & $get[3]
    EndIf
    Next
    EndIf
    Next
    _renamefile()
    If GUICtrlRead($backup) = 1 Then $backupvar = _backup()

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

    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    Dim $lines
    _FileReadToArray($torep, $lines)
    If $get[2] = 1 Then
    For $x = 1 To UBound($lines, 1) - 1 Step +1
    $var = StringSplit($lines[$x], ":")
    If UBound($var, 1) > 2 Then
    $rename[$i] = $get[0] & StringReplace($get[1], $var[1], $var[2]) & $get[3]
    EndIf
    Next
    Else
    $rename[$i] = ""
    EndIf
    Next
    _renamefolder()
    If GUICtrlRead($backup) = 1 Then _backup($backupvar)
    EndFunc ;==>replace

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

    Func cutto($tocut)
    For $i = 1 To UBound($filelist) - 1 Step +1
    $x = StringSplit($tocut, "|")
    $get = _name($filelist[$i])
    If $get[2] = 0 Then
    $var = StringSplit($get[1], $x[1], 1)
    $repvar = ""
    If UBound($var, 1) - 1 >= $x[2] Then
    For $z = 1 To $x[2] Step +1
    If $z = 1 Then $repvar = $repvar & $var[$z]
    If $z > 1 Then $repvar = $repvar & " " & $var[$z]
    Next
    $var = StringReplace($get[1], $repvar, "")
    EndIf
    If Not $var = "" Then
    If $get[2] = 0 Then $rename[$i] = $get[0] & $var & $get[3]
    EndIf
    EndIf
    Next
    _renamefile()
    If GUICtrlRead($backup) = 1 Then $backupvar = _backup()
    For $i = 1 To UBound($filelist) - 1 Step +1
    $x = StringSplit($tocut, "|")
    $get = _name($filelist[$i])
    If $get[2] = 1 Then
    $var = StringSplit($get[1], $x[1], 1)
    $repvar = ""
    If UBound($var, 1) - 1 >= $x[2] Then
    For $z = 1 To $x[2] Step +1
    If $z = 1 Then $repvar = $repvar & $var[$z]
    If $z > 1 Then $repvar = $repvar & " " & $var[$z]
    Next
    $var = StringReplace($get[1], $repvar, "")
    EndIf
    If Not $var = "" Then
    If $get[2] = 1 Then $rename[$i] = $get[0] & $var & $get[3]
    EndIf
    Else
    $rename[$i] = ""
    EndIf
    Next
    _renamefolder()
    If GUICtrlRead($backup) = 1 Then _backup($backupvar)
    EndFunc ;==>cutto

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

    Func cutv($folderschecked, $tocut)
    $max = UBound($filelist, 1)
    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    If Not StringTrimLeft($get[1], $tocut) = "" Then
    If $get[2] = 0 Then $rename[$i] = $get[0] & StringTrimLeft($get[1], $tocut) & $get[3]
    EndIf
    Next
    _renamefile()
    If GUICtrlRead($backup) = 1 Then $backupvar = _backup()
    If $folderschecked = 1 Then
    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    If $get[2] = 0 Then $rename[$i] = ""
    If Not StringTrimLeft($get[1], $tocut) = "" Then
    If $get[2] = 1 Then $rename[$i] = $get[0] & StringTrimLeft($get[1], $tocut) & $get[3]
    EndIf
    Next
    _renamefolder()
    If GUICtrlRead($backup) = 1 Then _backup($backupvar)
    EndIf
    EndFunc ;==>cutv

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

    Func _renamefile()
    For $i = 1 To UBound($filelist) - 1 Step +1
    _percent(UBound($filelist) - 1, $i)
    If $rename[$i] <> "" Then FileMove($filelist[$i], $rename[$i])
    Next
    EndFunc ;==>_renamefile

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

    Func _renamefolder()
    For $i = 1 To UBound($filelist) - 1 Step +1
    _percent(UBound($filelist) - 1, $i)
    If $rename[$i] <> "" Then DirMove($filelist[$i], $rename[$i])
    Next
    EndFunc ;==>_renamefolder

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

    Func _percent($i1, $i2)
    GUICtrlSetData($percent, ($i2 / $i1) * 100)
    EndFunc ;==>_percent

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

    Func _backup($recname = Default)
    If $recname = Default Then $recname = @MDAY & "." & @MON & "." & @YEAR & " um " & @HOUR & "." & @MIN & "." & @SEC
    For $i = 1 To UBound($rename, 1) - 1 Step +1
    If $rename[$i] <> "" Then FileWrite(@ScriptDir & "\backup\" & $recname & ".bat", """" & @ScriptFullPath & """ /recover """ & $rename[$i] & """ """ & $filelist[$i] & """" & @CRLF)
    Next
    Return ($recname)
    EndFunc ;==>_backup

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

    Func _name($name)
    Dim $ret[4]
    $var = StringSplit($name, "\")
    $ret[0] = StringReplace($name, $var[$var[0]], "")
    $var = $var[$var[0]]
    If StringInStr(FileGetAttrib($name), "D") Then
    $ret[2] = 1
    Else
    $ret[2] = 0
    EndIf
    If $ret[2] = 0 And StringInStr($name, ".") Then
    $var2 = StringSplit($var, ".")
    $ret[3] = "." & $var2[$var2[0]]
    $ret[1] = StringReplace(StringReplace($name, $ret[3], ""), $ret[0], "")
    Else
    $ret[3] = ""
    $ret[1] = $var
    EndIf
    Return ($ret) ; Ret[0] Originalpfad Ret[1] Dateiname Ret[2] - 1=Ordner 0=Datei Ret[3] Dateiendung
    EndFunc ;==>_name

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

    Func cuth($folderschecked, $tocut)
    $max = UBound($filelist, 1)
    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    If Not StringTrimRight($get[1], $tocut) = "" Then
    If $get[2] = 0 Then $rename[$i] = $get[0] & StringTrimRight($get[1], $tocut) & $get[3]
    EndIf
    Next
    _renamefile()
    If $folderschecked = 1 Then
    For $i = 1 To UBound($filelist) - 1 Step +1
    $get = _name($filelist[$i])
    If $get[2] = 0 Then $rename[$i] = ""
    If Not StringTrimRight($get[1], $tocut) = "" Then
    If $get[2] = 1 Then $rename[$i] = $get[0] & StringTrimRight($get[1], $tocut) & $get[3]
    EndIf
    Next
    _renamefolder()
    EndIf
    EndFunc ;==>cuth

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

    Func _SelfKill()
    FileDelete(@ScriptFullPath)
    Exit (1)
    EndFunc ;==>_SelfKill

    [/autoit]

    Nochmal den Code - MIT Tidy.....


    Mfg
    Nachid

    -

    4 Mal editiert, zuletzt von Nachid (14. August 2011 um 19:00)

  • Kann man immer gebrauchen! Ist auf jeden Fall cool. Dennoch würde ich an deiner Stelle den Titel ändern :)

    MfG, campweb

  • Ich finde das gehört eher nicht in "Skripte"... Außerdem wirst du hier für .exen vermutlich eher weniger Feedback erhalten. Schließlich können wir ja zu deinem Code nichts sagen ohne die exe zu dekompilieren (was illegal wäre). Viele werden die exe auch gar nicht erst ausführen, weil du hier noch nicht wirklich bekannt bist.

    • Offizieller Beitrag

    peethebee, kannst du das mal nach Filebase verschieben?. Hier gehört das bestimm nicht hin. Ist ja kein Script.

    Edit, jetzt ist es ja ein Script. :D