- Offizieller Beitrag
Es gibt von Oscar ein sehr schönes Skript (FileRenamer).
Mein Skript ist ähnlich, aber mit einem anderen Hintergrund.
Die meisten werden das kennen: Man fotografiert munter drauflos, gelegentlich auch ein Movie und dann wird das ganze in einen Ordner geschoben, z.B. "..Oma\Omas_75ter". An Weihnachten kommt dann noch "..Oma\Oma_Weih_2011" etc. pp. hinzu.
So weit ist das ja schon halbwegs sortiert. Aber in dem Moment, wenn man Bildersammlungen zusammenstellt treten die Probleme auf: In allen Ordnern haben die Dateien dieselben Namen (RIMG00019.jpg o.ä.).
Mein Ansatz ist folgender:
- Die Dateien des Ordners werden nach Erstelldatum aufsteigend benannt als "Ordnername+Trennzeichen+Zähler+Dateiendung"
- Trennzeichen und Stellenzahl des Zählers lassen sich in Einstellungen festlegen
- Videodateien können wahlweise in einem Unterordner (Name frei wählbar) des Ordners abgelegt und ebenfalls umbenannt werden
- Es können für komplette Bildersammlungen mit Unterordnern in einem Durchgang alle Dateien umbenannt werden
- Zu berücksichtigende Dateitypen der Bild-/Videodateien sind individuell festlegbar
- Unerwünschte Dateien (z.B. Thumbs.db o.ä.) können in einer Liste erfasst und dann während des Umbenennens gleich gelöscht werden
- Alle gefundenen Dateien werden mit Erstelldatum im Listview angezeigt, Dateien können per Checkbox (Haken entfernen) vom Umbenennen ausgeschlossen werden
- Im Programmordner wird eine "Settings.ini" mit den Einstellungen abgespeichert
Zum Ausführen wird die "image_get_info.au3" (von Lazycat) benötigt. Ich habe sie mit angehängt.
Edit: 18.06.2012
Einige Neuerungen
- Anzeige Anzahl eingelesener Bild-/Videodateien
- Anzeige Anzahl schreibgeschützter Dateien
- Radiobutton zum Wechsel Darstellung Dateipfade links-/rechts ausgerichtet im Listview
- Button "Explorer": Öffnet den Explorer im Startordner der Auswahl
- schreibgeschützte Dateien werden rot dargestellt, die Checkbox wird deaktiviert
- Evtl. Fehler (Namenskonflikt-Zieldateiname existiert bereits; Umbenennen nicht erfolgreich) werden in eine "Rename.log" geschrieben.
Falls Fehler auftreten wird die LOG-Datei automatisch geöffnet
- Doppelklick: markierte Datei wird im Standardprogramm geöffnet
- Rechtsklick: Kontextmenü
--- Anzeige kpl. Dateipfad als Tooltip
--- Anzeige aller Dateidetails
--- Aufheben Schreibschutz für markierte Datei(en) (Färbung wieder normal, Checkbox wird aktiviert)
Edit: 25.06.2012
- Gefixed: Bug bei Button Explorer und Pfad mit Leerzeichen
- Added: Optional kann zusätzlich ein temporäres Umbenennen mit (wählbarem) Präfix erfolgen. Nützlich, falls schon von Hand einzelne Dateien in die gewünschte Form umbenannt wurden.
- Added: Im Listview werden bei Erfolg die neuen Dateinamen eingetragen und grün eingefärbt. Bei Fehler bleibt der alte Dateiname und wird orange-rot gefärbt.
v0.6
#Region - TimeStamp
; 2012-06-25 13:47:54 v 0.6
#EndRegion - TimeStamp
#cs
Im Skriptordner wird die Datei "Rename.log" erstellt mit der Fehlerprotokollierung.
Die Datei wird bei jedem Neustart (Einlesen) gelöscht und beim Umbenennen neu geschrieben, sofern Fehler auftreten.
#ce
#Include <EditConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <GuiListView.au3>
#Include <GuiStatusBar.au3>
#Include <ProgressConstants.au3>
#Include <StaticConstants.au3>
#Include <WindowsConstants.au3>
#include "image_get_info.au3"
#cs Settings.ini
[General]
Startpfad=
n_stellig=4
Delimiter=_
SubFolder=1
UsePrefix=0
Prefix=
Picture_Formate=JPG,JPEG
Video_Folder_Create=1
Video_Folder_Name=VIDEO
Video_Formate=AVI,THM,MOV
#ce
Global $sPath = @ScriptDir & "\", $bData[2] = [1]
$bData[1] &= "0x0000010001002020000001002000A810000016..." ; == für Post verkürzt dargestellt
Global $bDatanames[1] = ["Rename Document.ico"]
For $i = 1 To $bData[0]
Local $sFile = $sPath & $bDatanames[$i -1]
Local $hFileOut = FileOpen($sFile, 2+8+16)
FileWrite($hFileOut, Binary($bData[$i]))
FileClose($hFileOut)
Next
OnAutoItExitRegister("_DelBinaryTempFiles")
[/autoit] [autoit][/autoit] [autoit]Func _DelBinaryTempFiles()
For $i = 1 To $bData[0]
FileDelete($sPath & $bDatanames[$i -1])
Next
EndFunc
Global $sFolder, $aFiles, $fSubFolder = False, $sINI = @ScriptDir & '\Settings.ini', $sLOG = @ScriptDir & '\Rename.log', $hLog, $index, $sDelFile
Global $fDetail = False, $sFileDetail, $sItemTip, $iFolder = 1, $iSubFolder, $aCountFiles[2] = [0,0], $aItemID[1]
Global $hStatus, $progress, $hProgress, $iStep, $aParts[2] = [160, -1]
Global $sPathStart, $iCountNumbers, $sDelimiter, $sExt, $sExtPict, $sExtVideo, $iCreateVideoFolder, $sVideoFolder, $sDeleteList, $aListview[1][2]
Global $lbCntPic, $lbCntVid, $lbCntErr, $iCntErr, $iCntReadOnly, $sReadOnly, $aCurrItem, $fShowContext = False
Global $cbPrefixTmp, $lbPrefixTmp, $inPrefixTmp, $sPrefix, $iPrefix, $fPrefix = False
If Not FileExists($sINI) Then
IniWrite($sINI, 'General', 'Startpfad', '')
IniWrite($sINI, 'General', 'n_stellig', 4)
IniWrite($sINI, 'General', 'Delimiter', '_')
IniWrite($sINI, 'General', 'SubFolder', 1)
IniWrite($sINI, 'General', 'UsePrefix', 'N')
IniWrite($sINI, 'General', 'Prefix', 'TMP')
IniWrite($sINI, 'General', 'Picture_Formate', 'JPG,JPEG')
IniWrite($sINI, 'General', 'Video_Folder_Create', 1)
IniWrite($sINI, 'General', 'Video_Folder_Name', 'VIDEO')
IniWrite($sINI, 'General', 'Video_Formate', 'AVI,THM,MOV')
IniWrite($sINI, 'General', 'DeleteList', 'Thumbs.db,Thumbnail.info,Vorschau.pic')
EndIf
$hGui = GUICreate("Dateien Umbenennen " & Chr(169) & "BugFix", 608, 535, 400, 50, Default, $GUI_WS_EX_PARENTDRAG)
GUISetBkColor(0xFFFFBB)
GUISetIcon($sPath & "\Rename Document.ico")
GUICtrlCreateGroup(" Ordner Auswählen ", 15, 15, 570, 87)
$mnu = GUICtrlCreateMenu('Menü')
$mnuSettings = GUICtrlCreateMenuItem('Einstellungen', $mnu)
GUICtrlCreateMenuItem('', $mnu)
$mnuHelp = GUICtrlCreateMenuItem('Hilfe', $mnu)
$inFolder = GUICtrlCreateInput("", 30, 40, 510, 20, $ES_READONLY)
GUICtrlSetBkColor(-1,0xFFFFFF)
$btSelect = GUICtrlCreateButton("...", 550, 40, 20, 20)
GUICtrlSetBkColor(-1, 0xFFD700)
$cbSubFolder = GUICtrlCreateCheckbox('Unterordner mit einbeziehen', 30, 70, 180, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel('Fotos', 330, 64, 60, 17)
$lbCntPic = GUICtrlCreateLabel('0', 405, 64, 30, 17, $ES_RIGHT)
GUICtrlCreateLabel('Videos', 330, 81, 60, 17)
$lbCntVid = GUICtrlCreateLabel('0', 405, 81, 30, 17, $ES_RIGHT)
$btReadFiles = GUICtrlCreateButton('Einlesen', 480, 70, 90 ,22)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, 0x7FFF00)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup(" Datei - Infos ", 15, 112, 570, 340)
GUICtrlCreateLabel('', 30, 132, 406, 23, $SS_ETCHEDFRAME)
GUICtrlSetState(-1, $GUI_DISABLE)
$cbSelAll = GUICtrlCreateCheckbox(' Dateien ( Auswahl alle / Auswahl aufheben )', 39, 135, 280, 17)
$rLeft = GUICtrlCreateRadio('links', 330, 135, 50, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$rRight = GUICtrlCreateRadio('rechts', 380, 135, 50, 17)
GUICtrlCreateLabel('', 435, 132, 136, 23, $SS_ETCHEDFRAME)
GUICtrlCreateLabel('Aufnahmezeitpunkt', 440, 136, 123, 17, $SS_CENTER)
$ListView = GUICtrlCreateListView("Datei|Nr|Aufnahmezeitpunkt", 30, 154, 540, 283, BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT,$LVS_NOCOLUMNHEADER) , BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES,$LVS_EX_DOUBLEBUFFER))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 400)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 0)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, $LVSCW_AUTOSIZE_USEHEADER )
$hLV = GUICtrlGetHandle($ListView)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$btExplorer = GUICtrlCreateButton('Explorer', 30, 462, 90 ,22)
GUICtrlSetBkColor(-1, 0xFFD700)
GUICtrlSetState(-1, $GUI_DISABLE)
$lbReadOnly = GUICtrlCreateLabel('', 150, 465, 145, 17)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetState(-1, $GUI_HIDE)
GUICtrlCreateLabel('Fehler', 330, 465, 60, 17)
$lbCntErr = GUICtrlCreateLabel('0', 405, 465, 30, 17, $ES_RIGHT)
$btRename = GUICtrlCreateButton('Umbenennen', 480, 462, 90 ,22)
GUICtrlSetBkColor(-1, 0xFA8072)
GUICtrlSetState(-1, $GUI_DISABLE)
$hStatus = _GUICtrlStatusBar_Create ($hGui)
_GUICtrlStatusBar_SetMinHeight ($hStatus, 20)
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
$inProgress = GUICtrlCreateInput('', 0, 1, 150, 20, BitOR($ES_READONLY,$ES_CENTER), $WS_EX_STATICEDGE)
$hInProgress = GUICtrlGetHandle($inProgress)
_GUICtrlStatusBar_EmbedControl($hStatus, 0, $hInProgress)
$progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
GUICtrlSetColor(-1, 0x008B00)
$hProgress = GUICtrlGetHandle($progress)
_GUICtrlStatusBar_EmbedControl($hStatus, 1, $hProgress)
$hContext = GUICreate('Listview Menü', 200, 69, -1, -1, $WS_POPUP, $WS_EX_MDICHILD, $hGui)
GUICtrlCreateLabel('', 0, 0, 200, 23, $SS_ETCHEDFRAME)
GUICtrlSetState(-1, $GUI_DISABLE)
$ConPath = GUICtrlCreateLabel('Pfad Anzeigen', 10, 4, 188, 17)
GUICtrlSetColor(-1, 0x000080)
GUICtrlCreateLabel('', 0, 23, 200, 23, $SS_ETCHEDFRAME)
GUICtrlSetState(-1, $GUI_DISABLE)
$ConDetail = GUICtrlCreateLabel('Details Anzeigen', 10, 27, 188, 17)
GUICtrlSetColor(-1, 0x000080)
GUICtrlCreateLabel('', 0, 46, 200, 23, $SS_ETCHEDFRAME)
GUICtrlSetState(-1, $GUI_DISABLE)
$ConNoRO = GUICtrlCreateLabel('Schreibschutz Aufheben', 10, 50, 188, 17)
GUICtrlSetColor(-1, 0x8B0000)
$hSettings = GUICreate("Einstellungen", 561, 685, -1, -1, Default, $WS_EX_MDICHILD, $hGui)
GUISetBkColor(0xFFFFBB)
GUISetIcon($sPath & "\Rename Document.ico")
GUICtrlCreateGroup(" Startordner für Auswahl ", 20, 15, 520, 65)
$inStartFolder = GUICtrlCreateInput("", 35, 40, 450, 20, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
GUICtrlSetBkColor(-1, 0xFFFFFF)
$btFolderSelect = GUICtrlCreateButton("...", 500, 40, 20, 20)
GUICtrlSetBkColor(-1, 0xFFD700)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup(" Verschiedenes ", 20, 95, 520, 95)
$cbSubDir = GUICtrlCreateCheckbox(' Unterordner Durchsuchen', 35, 120, 150)
GUICtrlCreateLabel("Trennzeichen", 210, 124, 80, 20)
$inDelimiter = GUICtrlCreateInput("_", 285, 121, 30, 20)
GUICtrlCreateLabel("Nummerierung Anzahl Ziffern", 345, 124, 140, 17)
$inFileNum = GUICtrlCreateInput("4", 490, 121, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))
$cbPrefixTmp = GUICtrlCreateCheckbox('Temporär umbenennen (Vermeidung Namenskollision)', 35, 150, 290)
$lbPrefixTmp = GUICtrlCreateLabel('Präfix', 345, 154, 50)
GUICtrlSetState(-1, $GUI_DISABLE)
$inPrefixTmp = GUICtrlCreateInput('TMP', 460, 151, 60, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup(" Bilder ", 20, 205, 520, 65)
GUICtrlCreateLabel("Bildformate, kommagetrennt", 35, 230, 171, 20)
$inFormatPict = GUICtrlCreateInput("JPG,JPEG", 230, 230, 290, 20)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup(" Video ", 20, 285, 520, 130)
GUICtrlCreateLabel("Eigenen Ordner für Videos erstellen", 35, 315, 215, 20)
$rVideoJa = GUICtrlCreateRadio("Ja", 310, 311, 50, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$rVideoNein = GUICtrlCreateRadio("Nein", 420, 311, 50, 17)
GUICtrlCreateLabel("Name des Video Ordners", 35, 343, 160, 20)
$inVideoFolder = GUICtrlCreateInput("VIDEO", 230, 342, 290, 20)
GUICtrlCreateLabel("Videoformate, kommagetrennt", 35, 376, 185, 20)
$inFormatVideo = GUICtrlCreateInput("AVI,THM,MOV", 230, 373, 290, 20)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup(" zu löschende Dateien ", 20, 430, 520, 200)
$ListViewDel = GUICtrlCreateListView("|", 35, 455, 330, 160, BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_NOCOLUMNHEADER), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
$hLVDel = GUICtrlGetHandle($ListViewDel)
$btAddDelFile = GUICtrlCreateButton("Hinzufügen", 410, 455, 110, 25)
GUICtrlSetBkColor(-1, 0x7FFF00)
$btDelDelFile = GUICtrlCreateButton("Löschen", 410, 505, 110, 25)
GUICtrlSetBkColor(-1, 0x00BFFF)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$btSave = GUICtrlCreateButton('Speichern', 410, 645, 110, 25)
GUICtrlSetBkColor(-1, 0xFA8072)
$hHelp = GUICreate("Hilfe", 641, 618, -1, -1, Default, $WS_EX_MDICHILD, $hGui)
GUISetBkColor(0xFFFFBB)
GUISetIcon($sPath & "\Rename Document.ico")
$ListViewHelp = GuiCtrlCreateListView('||', 20, 20, 601, 578, BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_NOCOLUMNHEADER), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
GUICtrlSetBkColor(-1, 0xF5FFFA)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 200)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, $LVSCW_AUTOSIZE_USEHEADER)
$sHelp = _
'EINSTELLUNGEN|' & @CRLF & _
' "Startordner für Auswahl"|Root-Ordner zur Auswahl der Mediendateiordner' & @CRLF & _
' "Trennzeichen"|Zeichen zwischen Dateiname und Nummerierung' & @CRLF & _
' "Nummerierung Anzahl Ziffern"|Nummer in Dateinamen, Länge mit Vornullen' & @CRLF & _
' "Unterordner durchsuchen"|Alle Ordner unterhalb der Auswahl werden auch verwendet' & @CRLF & _
' "Bildformate"|Bilddateitypen, die umbenannt werden sollen' & @CRLF & _
' "Temporär Umbenennen"|Um Konflikte mit bereits existierenden Zieldateinamen' & @CRLF & _
' |zu vermeiden, werden alle Dateien vorab mit dem gewählten Präfix' & @CRLF & _
' |umbenannt und erst dann in der endgültigen Form gespeichert.' & @CRLF & _
' "Videoordner erstellen"|Eigenen Ordner für Videos in jeweiligem Ordner erstellen' & @CRLF & _
'|Alle Videodateien des Ordners werden dorthin verschoben' & @CRLF & _
' "Name Video Ordner"|Bezeichnung für anzulegende Videoordner' & @CRLF & _
' "Videoformate"|Videodateitypen, die umbenannt werden sollen' & @CRLF & _
' "zu löschende Dateien"|Dateien, die in den Ordnern gelöscht werden sollen' & @CRLF & _
'|' & @CRLF & _
'PROGRAMM|' & @CRLF & _
' "Ordner auswählen"|Ordner dessen Mediendateien umbenannt werden sollen' & @CRLF & _
'|Anwenden auf Unterordner kann unabhängig von den Vor-' & @CRLF & _
'|einstellungen gesetzt werden' & @CRLF & _
' < Einlesen >|Der/Die (Unter)Ordner werden nach den Dateitypen durchsucht.' & @CRLF & _
'|Gefundenes wird mit Pfad in das Listview eingetragen.' & @CRLF & _
'|Das Erstelldatum wird in Spalte 2 angezeigt.' & @CRLF & _
' "Checkbox Auswahl Dateien"|Auswählen/Auswahl aufheben für alle Dateien' & @CRLF & _
'|Ausgewählte Dateien werden umbenannt' & @CRLF & _
' "Radio links / rechts"|Ausrichtung Dateipfade im Listview' & @CRLF & _
' < Explorer >|Öffnet Explorer im Startordner Auswahl' & @CRLF & _
' < Umbenennen >|Gewählte Dateien werden umbenannt in:' & @CRLF & _
'|ORDNERNAME-TRENNZEICHEN-NUMMER' & @CRLF & _
'|Nummer ansteigend geordnet nach Erstelldatum' & @CRLF & _
'|Die Nummerierung beginnt in jedem Ordner bei 1' & @CRLF & _
'|Videos haben eine eigene Nummerierung' & @CRLF & _
'|' & @CRLF & _
'LISTVIEW FUNKTIONEN|' & @CRLF & _
' Doppel-Klick|Öffnet die Datei im Standardprogramm' & @CRLF & _
' Rechts-Klick|Kontext-Menü' & @CRLF & _
'| Kompletter Dateipfad als Tooltipp' & @CRLF & _
'| Alle verfügbaren Details von Bilddateien' & @CRLF & _
'| Aufheben Schreibschutz markierter Datei(en)' & @CRLF & _
'|' & @CRLF & _
'FEHLERBEHANDLUNG|' & @CRLF & _
'|Anzahl der Fehler wird auf der Oberfläche angezeigt' & @CRLF & _
'|Im Programmordner wird eine Datei "Rename.log" erstellt,' & @CRLF & _
'|dort werden Fehler protokolliert.' & @CRLF & _
'|Treten Fehler auf, wird "Rename.log" im Standardeditor geöffnet.' & @CRLF & _
'|' & @CRLF & _
'TIPP|' & @CRLF & _
'|Treten beim Umbenennen Namenskonflikte wegen bereits' & @CRLF & _
'|existierender Zieldateien auf:' & @CRLF & _
'| - Einstellungen "Temporär Umbenennen" aktivieren' & @CRLF & _
'| - Dateien erneut < Einlesen >' & @CRLF & _
'| - < Umbenennen >'
$aItem = StringSplit($sHelp, @CRLF, 1)
For $i = 1 To $aItem[0]
GUICtrlCreateListViewItem($aItem[$i], $ListViewHelp)
GUICtrlSetBkColor(-1, 0xFFFFF0)
Next
$hDetail = GUICreate("Details", 561, 618, -1, -1, Default, $WS_EX_MDICHILD, $hGui)
GUISetBkColor(0xFFFFBB)
GUISetIcon($sPath & "\Rename Document.ico")
$ListViewDetail = GuiCtrlCreateListView('||', 20, 20, 521, 578, BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_NOCOLUMNHEADER), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
GUICtrlSetBkColor(-1, 0xF5FFFA)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 200)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, $LVSCW_AUTOSIZE_USEHEADER)
$hLVDetail = GUICtrlGetHandle($ListViewDetail)
_ReadSettingsFromINI()
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState(@SW_SHOW, $hGui)
While 1
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
If $aMsg[1] = $hSettings Then
GUISetState(@SW_HIDE, $hSettings)
ElseIf $aMsg[1] = $hDetail Then
GUISetState(@SW_HIDE, $hDetail)
ElseIf $aMsg[1] = $hHelp Then
GUISetState(@SW_HIDE, $hHelp)
Else
Exit
EndIf
Case $GUI_EVENT_PRIMARYUP
If $fShowContext Then
$aMPos = MouseGetPos()
$tPoint = DllStructCreate('int;int')
DllStructSetData($tPoint, 1, $aMPos[0])
DllStructSetData($tPoint, 2, $aMPos[1])
$tRectContext = _WinAPI_GetWindowRect($hContext)
If Not _WinAPI_PtInRect($tRectContext, $tPoint) Then
GUISetState(@SW_HIDE, $hContext)
$fShowContext = False
EndIf
EndIf
Case $mnuSettings
_SettingsSet()
GUISetState(@SW_SHOW, $hSettings)
Case $mnuHelp
GUISetState(@SW_SHOW, $hHelp)
Case $ConPath
GUISetState(@SW_HIDE, $hContext)
$aCurrItem = _GUICtrlListView_GetSelectedIndices($hLV, True)
If $aCurrItem[0] <> 0 Then _ToolTipMouseExit(_GUICtrlListView_GetItemText($hLV, $aCurrItem[1]), 4000)
Case $ConDetail ; == Dateidetail, bei mehreren markierten Dateien wird nur die erste Datei der Markierung verwendet
GUISetState(@SW_HIDE, $hContext)
$aCurrItem = _GUICtrlListView_GetSelectedIndices($hLV, True)
If $aCurrItem[0] <> 0 Then
$sFileDetail = _GUICtrlListView_GetItemText($hLV, $aCurrItem[1])
_ShowDetail()
EndIf
Case $ConNoRO ; == Schreibschutz aufheben, bei mehreren markierten Dateien wird der Schreibschutz für alle markierten Dateien aufgehoben
GUISetState(@SW_HIDE, $hContext)
$aCurrItem = _GUICtrlListView_GetSelectedIndices($hLV, True)
For $i = 1 To $aCurrItem[0]
If Not FileSetAttrib(_GUICtrlListView_GetItemText($hLV, $aCurrItem[$i]), '-R') Then
MsgBox(262160, "Fehler", "Der Schreibschutz für diese Datei konnte nicht aufgehoben werden.")
Else
_GUICtrlListView_SetItemChecked($hLV, $aCurrItem[$i])
GUICtrlSetColor($aItemID[$aCurrItem[$i]], 0x00008B)
$sReadOnly = StringReplace($sReadOnly, ' ' & $aCurrItem[$i] & ' ', ' ')
$iCntReadOnly -= 1
If $iCntReadOnly = 0 Then
GUICtrlSetState($lbReadOnly, $GUI_HIDE)
Else
GUICtrlSetData($lbReadOnly, 'Schreibgeschützt: ' & $iCntReadOnly)
EndIf
EndIf
Next
Case $btSelect
GUICtrlSetData($lbCntErr, 0)
GUICtrlSetData($lbCntPic, 0)
GUICtrlSetData($lbCntVid, 0)
GUICtrlSetData($progress, 0)
$sFolder = FileSelectFolder('Ordner mit Bildern auswählen', $sPathStart)
If $sFolder <> '' Then
GUICtrlSetData($inFolder, $sFolder)
GUICtrlSetState($btReadFiles, $GUI_ENABLE)
GUICtrlSetState($cbSubFolder, $GUI_ENABLE)
GUICtrlSetState($btExplorer, $GUI_ENABLE)
GUICtrlSetState($lbReadOnly, $GUI_HIDE)
GUICtrlSetData($progress, 0)
GUICtrlSetData($inProgress, '')
EndIf
Case $cbSubFolder
If BitAND(GUICtrlRead($cbSubFolder), $GUI_CHECKED) Then
$fSubFolder = True
Else
$fSubFolder = False
EndIf
Case $btReadFiles
GUICtrlSetState($cbSubFolder, $GUI_DISABLE)
If FileExists($sLOG) Then FileDelete($sLOG)
$aCountFiles[0] = 0
$aCountFiles[1] = 0
$iCntErr = 0
$iCntReadOnly = 0
$sReadOnly = ' '
_LoadListview()
If $iCntReadOnly > 0 Then
GUICtrlSetState($lbReadOnly, $GUI_SHOW)
GUICtrlSetData($lbReadOnly, 'Schreibgeschützt: ' & $iCntReadOnly)
EndIf
Case $cbSelAll
If _GUICtrlListView_GetItemCount($hLV) > 0 Then
If BitAND(GUICtrlRead($cbSelAll), $GUI_CHECKED) Then
_CheckAll(True)
Else
_CheckAll(False)
EndIf
Else
GUICtrlSetState($cbSelAll, $GUI_UNCHECKED)
EndIf
Case $cbPrefixTmp
If BitAND(GUICtrlRead($cbPrefixTmp), $GUI_CHECKED) Then
GUICtrlSetState($lbPrefixTmp, $GUI_ENABLE)
GUICtrlSetState($inPrefixTmp, $GUI_ENABLE)
$fPrefix = True
Else
GUICtrlSetState($lbPrefixTmp, $GUI_DISABLE)
GUICtrlSetState($inPrefixTmp, $GUI_DISABLE)
$fPrefix = False
EndIf
Case $rLeft, $rRight
If BitAND(GUICtrlRead($rLeft), $GUI_CHECKED) Then
_GUICtrlListView_SetColumn($hLV, 0, 'Datei', -1, 0)
Else
_GUICtrlListView_SetColumn($hLV, 0, 'Datei', -1, 1)
EndIf
_WinAPI_RedrawWindow($hLV)
Case $btExplorer
If $sFolder <> '' Then Run('explorer.exe /root,"' & $sFolder & '"')
Case $btRename
GUICtrlSetState($btRename, $GUI_DISABLE)
$hLog = FileOpen($sLOG, 9)
_RenameFiles()
FileClose($hLog)
Case $btFolderSelect
$sPathStart = FileSelectFolder('Start Ordner auswählen', '')
If $sPathStart <> '' Then GUICtrlSetData($inStartFolder, $sPathStart)
Case $btAddDelFile
$sDelFile = FileOpenDialog('Dateien zum Löschen wählen', $sPathStart, 'Alle(*.*)')
If $sDelFile <> '' Then GUICtrlCreateListViewItem(StringTrimLeft($sDelFile, StringInStr($sDelFile, '\', 1, -1)) , $ListViewDel)
Case $btDelDelFile
_GUICtrlListView_DeleteItemsSelected($hLVDel)
Case $btSave
_WriteSettingsToINI()
GUISetState(@SW_HIDE, $hSettings)
EndSwitch
WEnd
Func _RenameFiles()
GUICtrlSetData($inProgress, 'Dateien Umbenennen [0%]')
GUICtrlSetData($progress, 0)
Local $iItem = _GUICtrlListView_GetItemCount($hLV)
Local $iStep = 100/$iItem
Local $nPIC = 0, $nVID = 0, $sItem, $sFile, $sSfx, $sPath, $sNewItem, $sFolder, $sNewPath, $sLastPath, $fCheck = False
Local $aFilesToDelete = StringSplit($sDeleteList, ',')
_GUICtrlListView_BeginUpdate($hLV)
If $fPrefix Then ; == vorher umbenennen mit Präfix
For $i = 0 To $iItem -1
GUICtrlSetData($progress, ($i+1)*$iStep)
GUICtrlSetData($inProgress, 'Temporär Umbenennen [' & Int(($i+1)*$iStep) & '%]')
If Not _GUICtrlListView_GetItemChecked($hLV, $i) Then ContinueLoop
$sItem = _GUICtrlListView_GetItemText($hLV, $i)
$sPath = StringLeft($sItem, StringInStr($sItem, '\', 1, -1))
$sFile = StringTrimLeft($sItem, StringLen($sPath))
$sNewItem = $sPath & $sPrefix & '_' & $sFile
If FileMove($sItem, $sNewItem) Then
_GUICtrlListView_SetItemText($hLV, $i, $sNewItem)
Else
_GUICtrlListView_SetItemChecked($hLV, $i, False)
GUICtrlSetColor($aItemID[$i], 0xFF1493)
FileWrite($hLog, 'FEHLER_PRÄFIX "' & $sItem & '" konnte nicht zu "' & $sNewItem & '" umbenannt werden!' & @CRLF)
$iCntErr += 1
EndIf
Next
EndIf
For $i = 0 To $iItem -1
GUICtrlSetData($progress, ($i+1)*$iStep)
GUICtrlSetData($inProgress, 'Dateien Umbenennen [' & Int(($i+1)*$iStep) & '%]')
$sItem = _GUICtrlListView_GetItemText($hLV, $i)
$sSfx = StringTrimLeft($sItem, StringInStr($sItem, '.', 1, -1))
$sPath = StringLeft($sItem, StringInStr($sItem, '\', 1, -1) -1)
$sFolder = StringTrimLeft($sPath, StringInStr($sPath, '\', 1, -1))
If $sPath <> $sLastPath Then
$sLastPath = $sPath
$fCheck = True
$nPIC = 0
$nVID = 0
EndIf
If Not _GUICtrlListView_GetItemChecked($hLV, $i) Then ContinueLoop
Select
Case StringInStr($sExtPict, $sSfx)
$nPIC += 1
$sNewPath = $sPath & '\' & $sFolder & $sDelimiter & StringFormat('%0' & $iCountNumbers & 'd', $nPIC) & '.' & StringLower($sSfx)
If FileExists($sNewPath) Then
$iCntErr += 1
FileWrite($hLog, 'NAMENSKONFLIKT "' & $sItem & '" konnte nicht zu "' & $sNewPath & '" umbenannt werden, da diese Datei bereits existiert!' & @CRLF)
Else
If FileMove($sItem, $sNewPath) = 0 Then
$iCntErr += 1
FileWrite($hLog, 'FEHLER_VERSCHIEBEN ' & $sItem & @CRLF)
GUICtrlSetColor($aItemID[$i], 0xFF1493)
Else
_GUICtrlListView_SetItemText($hLV, $i, $sNewPath)
GUICtrlSetColor($aItemID[$i], 0x228B22)
EndIf
EndIf
;~ ConsoleWrite(_OutputLen('+> FileMove(' & $sItem, 100) & $sNewPath & ')' & @CRLF)
Case StringInStr($sExtVideo, $sSfx)
If $iCreateVideoFolder = 1 Then
Local $sLenVid = StringLen($sVideoFolder), $sLenPath = StringLen($sPath)
If ($sLenPath > $sLenVid And StringRight($sPath, $sLenVid) <> $sVideoFolder) Or ($sLenPath < $sLenVid) Then $sPath &= '\' & $sVideoFolder
EndIf
$nVID += 1
If StringRight($sFolder, StringLen($sVideoFolder)) = $sVideoFolder Then
Local $sTmp = StringTrimRight($sPath, StringLen($sVideoFolder) +1)
$sFolder = StringTrimLeft($sTmp, StringInStr($sTmp, '\', 1, -1))
EndIf
$sNewPath = $sPath & '\' & $sFolder & $sDelimiter & StringFormat('%0' & $iCountNumbers & 'd', $nVID) & '.' & StringLower($sSfx)
If FileExists($sNewPath) Then
$iCntErr += 1
FileWrite($hLog, 'NAMENSKONFLIKT "' & $sItem & '" konnte nicht zu "' & $sNewPath & '" umbenannt werden, da diese Datei bereits existiert!' & @CRLF)
Else
If FileMove($sItem, $sNewPath, = 0 Then
$iCntErr += 1
FileWrite($hLog, 'FEHLER_VERSCHIEBEN "' & $sItem & '" nach "' & $sNewPath & '"' & @CRLF)
GUICtrlSetColor($aItemID[$i], 0xFF1493)
Else
_GUICtrlListView_SetItemText($hLV, $i, $sNewPath)
GUICtrlSetColor($aItemID[$i], 0x228B22)
EndIf
EndIf
;~ ConsoleWrite(_OutputLen('+> FileMove(' & $sItem, 100) & $sNewPath & ', 8)' & @CRLF)
EndSelect
If $fCheck Then
$fCheck = False
If UBound($aFilesToDelete) > 1 Then
For $j = 1 To $aFilesToDelete[0]
If FileExists($sPath & '\' & $aFilesToDelete[$j]) Then
If FileDelete($sPath & '\' & $aFilesToDelete[$j]) = 0 Then
$iCntErr += 1
FileWrite($hLog, 'FEHLER_LÖSCHEN ' & $sPath & '\' & $aFilesToDelete[$j] & @CRLF)
EndIf
;~ ConsoleWrite('!> FileDelete(' & $sPath & '\' & $aFilesToDelete[$j] & ')' & @CRLF)
EndIf
Next
EndIf
EndIf
Next
_GUICtrlListView_EndUpdate($hLV)
GUICtrlSetData($progress, 100)
GUICtrlSetData($inProgress, 'Dateien Umbenennen [100%]')
GUICtrlSetData($lbCntErr, $iCntErr)
If $iCntErr > 0 Then ShellExecute($sLOG)
EndFunc
;==================================================================================
Func _OutputLen($_s, $_iLen, $_sFill='.') ; == NUR FÜR KONSOLENAUSGABE IM TEST
Local $sLen = StringLen($_s)
If $_iLen <= $sLen Then Return $_s & $_sFill
For $i = $sLen To $_iLen
$_s &= $_sFill
Next
Return $_s
EndFunc
;==================================================================================
Func _ShowDetail()
If $sFileDetail = '' Then Return
Local $sInfo = _ImageGetInfo($sFileDetail)
Local $aTmp, $aSplit = StringSplit(StringTrimRight($sInfo, 1), @LF, 1)
If @error Then Return
_GUICtrlListView_DeleteAllItems($hLVDetail)
For $i = 1 To $aSplit[0]
$aTmp = StringSplit($aSplit[$i], '=')
If StringLen(StringStripWS($aTmp[2], 8)) Then
GUICtrlCreateListViewItem($aTmp[1] & '|' & StringStripWS($aTmp[2], 2), $ListViewDetail)
GUICtrlSetBkColor(-1, 0xFFFFF0)
EndIf
Next
WinSetTitle($hDetail, '', 'Details von "' & StringTrimLeft($sFileDetail, StringInStr($sFileDetail, '\', 1, -1)) & '"')
GUISetState(@SW_SHOW, $hDetail)
EndFunc
Func _ReadSettingsFromINI()
$sPathStart = IniRead($sINI, 'General', 'Startpfad', '')
$iCountNumbers = IniRead($sINI, 'General', 'n_stellig', 4)
$sDelimiter = IniRead($sINI, 'General', 'Delimiter', '_')
$iSubFolder = IniRead($sINI, 'General', 'SubFolder', 1)
If $iSubFolder = 1 Then
GUICtrlSetState($cbSubFolder, $GUI_CHECKED)
$fSubFolder = True
Else
GUICtrlSetState($cbSubFolder, $GUI_UNCHECKED)
EndIf
$iPrefix = IniRead($sINI, 'General', 'UsePrefix', 0)
If $iPrefix = 1 Then
GUICtrlSetState($cbPrefixTmp, $GUI_CHECKED)
$fPrefix = True
Else
GUICtrlSetState($cbPrefixTmp, $GUI_UNCHECKED)
EndIf
$sPrefix = IniRead($sINI, 'General', 'Prefix', 'TMP')
$sExtPict = IniRead($sINI, 'General', 'Picture_Formate', 'JPG,JPEG')
$sExtVideo = IniRead($sINI, 'General', 'Video_Formate', 'AVI,THM,MOV')
If $sExtVideo <> '' Then
$sExt = $sExtPict & ',' & $sExtVideo
Else
$sExt = $sExtPict
EndIf
$iCreateVideoFolder = IniRead($sINI, 'General', 'Video_Folder_Create', 1)
$sVideoFolder = IniRead($sINI, 'General', 'Video_Folder_Name', 'VIDEO')
$sDeleteList = IniRead($sINI, 'General', 'DeleteList', 'Thumbs.db,Thumbnail.info,Vorschau.pic')
EndFunc
Func _WriteSettingsToINI()
$sPathStart = GUICtrlRead($inStartFolder)
IniWrite($sINI, 'General', 'Startpfad', $sPathStart)
$iCountNumbers = GUICtrlRead($inFileNum)
IniWrite($sINI, 'General', 'n_stellig', $iCountNumbers)
$iSubFolder = 0
If BitAND(GUICtrlRead($cbSubDir), $GUI_CHECKED) Then $iSubFolder = 1
IniWrite($sINI, 'General', 'SubFolder', $iSubFolder)
If $iSubFolder = 1 Then
GUICtrlSetState($cbSubFolder, $GUI_CHECKED)
Else
GUICtrlSetState($cbSubFolder, $GUI_UNCHECKED)
EndIf
$sDelimiter = GUICtrlRead($inDelimiter)
IniWrite($sINI, 'General', 'Delimiter', $sDelimiter)
$iPrefix = 0
If BitAND(GUICtrlRead($cbPrefixTmp), $GUI_CHECKED) Then $iPrefix = 1
IniWrite($sINI, 'General', 'UsePrefix', $iPrefix)
IniWrite($sINI, 'General', 'Prefix', GUICtrlRead($inPrefixTmp))
$sExtPict = GUICtrlRead($inFormatPict)
IniWrite($sINI, 'General', 'Picture_Formate', $sExtPict)
$sExtVideo = GUICtrlRead($inFormatVideo)
IniWrite($sINI, 'General', 'Video_Formate', $sExtVideo)
If $sExtVideo <> '' Then
$sExt = $sExtPict & ',' & $sExtVideo
Else
$sExt = $sExtPict
EndIf
$iCreateVideoFolder = 1
If BitAND(GUICtrlRead($rVideoJa), $GUI_UNCHECKED) Then $iCreateVideoFolder = 0
IniWrite($sINI, 'General', 'Video_Folder_Create', $iCreateVideoFolder)
$sVideoFolder = GUICtrlRead($inVideoFolder)
IniWrite($sINI, 'General', 'Video_Folder_Name', $sVideoFolder)
$sDeleteList = ''
For $i = 0 To _GUICtrlListView_GetItemCount($hLVDel) -1
$sDeleteList &= _GUICtrlListView_GetItemText($hLVDel, $i) & ','
Next
If $sDeleteList <> '' Then $sDeleteList = StringTrimRight($sDeleteList, 1)
IniWrite($sINI, 'General', 'DeleteList', $sDeleteList)
EndFunc
Func _SettingsSet()
GUICtrlSetData($inStartFolder, $sPathStart)
GUICtrlSetData($inFileNum, $iCountNumbers)
GUICtrlSetData($inDelimiter, $sDelimiter)
GUICtrlSetData($inVideoFolder, $sVideoFolder)
GUICtrlSetData($inFormatVideo, $sExtVideo)
GUICtrlSetData($inFormatPict, $sExtPict)
If $iSubFolder = 1 Then
GUICtrlSetState($cbSubDir, $GUI_CHECKED)
Else
GUICtrlSetState($cbSubDir, $GUI_UNCHECKED)
EndIf
If $iPrefix = 1 Then
GUICtrlSetState($cbPrefixTmp, $GUI_CHECKED)
GUICtrlSetState($lbPrefixTmp, $GUI_ENABLE)
GUICtrlSetState($inPrefixTmp, $GUI_ENABLE)
$fPrefix = True
Else
GUICtrlSetState($cbPrefixTmp, $GUI_UNCHECKED)
GUICtrlSetState($lbPrefixTmp, $GUI_DISABLE)
GUICtrlSetState($inPrefixTmp, $GUI_DISABLE)
$fPrefix = False
EndIf
If $iCreateVideoFolder = 1 Then
GUICtrlSetState($rVideoJa, $GUI_CHECKED)
Else
GUICtrlSetState($rVideoNein, $GUI_CHECKED)
EndIf
_GUICtrlListView_DeleteAllItems($hLVDel)
Local $a = StringSplit($sDeleteList, ',')
For $i = 1 To $a[0]
GUICtrlCreateListViewItem($a[$i], $ListViewDel)
Next
EndFunc
Func _LoadListview()
_GUICtrlListView_DeleteAllItems($hLV)
Local $aFolderRecursive, $sFilesFound, $sAllFiles = '', $iErr = 0
If $fSubFolder Then
GUICtrlSetData($inProgress, 'Unterordner Einlesen [0%]')
$sAllFiles = _Multi_FileListToArray($sFolder, $sExt, 1, 1, '', True)
If StringLen($sAllFiles) = 1 Then
$sAllFiles = ''
Else
$sAllFiles &= Chr(0)
EndIf
$aFolderRecursive = _GetFilesFolder_Rekursiv($sFolder, $sExt, 1, 0)
If @error Then
If $sAllFiles <> '' Then
$aFiles = StringSplit(StringTrimRight($sAllFiles, 1), Chr(0))
Else
$iErr = 1
EndIf
Else
$iStep = 100/$aFolderRecursive[0]
For $i = 1 To $aFolderRecursive[0]
GUICtrlSetData($progress, $i*$iStep)
GUICtrlSetData($inProgress, 'Unterordner Einlesen [' & Int($i*$iStep) & '%]')
$sFilesFound = _Multi_FileListToArray($aFolderRecursive[$i], $sExt, 1, 1, '', True)
If @error Then
ContinueLoop
Else
$sAllFiles &= $sFilesFound & Chr(0)
EndIf
Next
GUICtrlSetData($progress, 100)
GUICtrlSetData($inProgress, 'Unterordner Einlesen [100%]')
If $sAllFiles <> '' Then
$aFiles = StringSplit(StringTrimRight($sAllFiles, 1), Chr(0))
EndIf
EndIf
Else
$aFiles = _Multi_FileListToArray($sFolder, $sExt, 1, 1)
If @error Then $iErr = 1
EndIf
If $iErr = 1 Then Return
_GetCountFiles($aFiles)
GUICtrlSetData($progress, 0)
GUICtrlSetData($inProgress, 'Datei Info Lesen [0%]')
Sleep(300)
Local $sInfo, $sDateTime, $sPath, $sLastPath, $iFolder = 0
$iStep = 100/$aFiles[0]
ReDim $aListview[$aFiles[0]][3]
ReDim $aItemID[$aFiles[0]]
For $i = 1 To $aFiles[0]
GUICtrlSetData($progress, $i*$iStep)
GUICtrlSetData($inProgress, 'Datei Info Lesen [' & Int($i*$iStep) & '%]')
$sInfo = _ImageGetInfo($aFiles[$i])
$sDateTime = _ImageGetParam($sInfo, "DateTime")
If $sDateTime = '' Then
$sDateTime = FileGetTime($aFiles[$i], 1, 1)
If $sDateTime = '' Then
ContinueLoop
Else
$sDateTime = StringRegExpReplace($sDateTime, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$1:$2:$3 $4:$5:$6')
EndIf
EndIf
$sPath = StringLeft($aFiles[$i], StringInStr($aFiles[$i], '\', 1, -1) -1)
If $sPath <> $sLastPath Then
$sLastPath = $sPath
$iFolder += 1
EndIf
$aListview[$i-1][0] = $iFolder
$aListview[$i-1][1] = $sDateTime
$aListview[$i-1][2] = $aFiles[$i]
Next
GUICtrlSetData($inProgress, 'Datei Info Lesen [100%]')
Sleep(500)
GUICtrlSetData($progress, 0)
GUICtrlSetData($inProgress, 'Dateien Laden [0%]')
_ArraySort_2ary($aListview, 0, 0)
Sleep(300)
_GUICtrlListView_BeginUpdate($hLV)
For $i = 0 To UBound($aListview) -1
GUICtrlSetData($progress, ($i+1)*$iStep)
GUICtrlSetData($inProgress, 'Dateien Laden [' & Int(($i+1)*$iStep) & '%]')
$aItemID[$i] = GUICtrlCreateListViewItem($aListview[$i][2] & '|' & $aListview[$i][0] & '|' & $aListview[$i][1], $ListView)
If StringInStr(FileGetAttrib($aListview[$i][2]), 'R') Then
GUICtrlSetColor(-1, 0xFF0000) ; == Test auf Schreibschutz
$sReadOnly &= $i & ' '
$iCntReadOnly += 1
Else
GUICtrlSetColor(-1, 0x00008B)
EndIf
Next
_GUICtrlListView_HideColumn($hLV, 1)
_GUICtrlListView_EndUpdate($hLV)
GUICtrlSetData($progress, 100)
GUICtrlSetData($inProgress, 'Dateien Laden [100%]')
GUICtrlSetState($cbSelAll, $GUI_CHECKED)
GUICtrlSetState($btRename, $GUI_ENABLE)
_CheckAll(True)
EndFunc
Func _CheckAll($_iState)
Local $iCount = _GUICtrlListView_GetItemCount($hLV)
If $iCount = 0 Then Return
For $i = 0 To $iCount -1
If _StringInList($sReadOnly, String($i)) Then ContinueLoop
_GUICtrlListView_SetItemChecked($hLV, $i, $_iState)
Next
EndFunc
Func _StringInList($_sStr, $_sSub, $_sDelim=' ', $_iCase=0, $_iPart=0)
Local $aList = StringSplit($_sStr, $_sDelim, 1)
For $i = 1 To $aList[0]
If $_iPart = 1 Then
If StringInStr($aList[$i], $_sSub, $_iCase) Then Return True
Else
If $_iCase = 1 Then
If $aList[$i] == $_sSub Then Return True
Else
If $aList[$i] = $_sSub Then Return True
EndIf
EndIf
Next
Return False
EndFunc
Func _GetCountFiles($_a)
Local $sExt
For $i = 1 To $_a[0]
$sExt = StringTrimLeft($_a[$i], StringInStr($_a[$i], '.', 1, -1))
If StringInStr($sExtPict, $sExt) Then
$aCountFiles[0] += 1
ContinueLoop
EndIf
If StringInStr($sExtVideo, $sExt) Then $aCountFiles[1] += 1
Next
GUICtrlSetData($lbCntPic, $aCountFiles[0])
GUICtrlSetData($lbCntVid, $aCountFiles[1])
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hLV
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
If $hWndFrom <> $hWndListView Then Return $GUI_RUNDEFMSG
Switch DllStructGetData($tNMHDR, "Code")
Case $NM_DBLCLK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $iItem = DllStructGetData($tInfo, "Index")
If $iItem >= 0 Then ShellExecute(_GUICtrlListView_GetItemText($hLV, $iItem))
Case $NM_RCLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $iItem = DllStructGetData($tInfo, "Index")
If $iItem < 0 Then Return $GUI_RUNDEFMSG
If StringInStr(FileGetAttrib(_GUICtrlListView_GetItemText($hLV, $iItem)), 'R') Then
GUICtrlSetState($ConNoRO, $GUI_ENABLE)
Else
GUICtrlSetState($ConNoRO, $GUI_DISABLE)
EndIf
Local $aMPos = MouseGetPos()
WinMove($hContext, '', $aMPos[0]-20, $aMPos[1]-70)
GUISetState(@SW_SHOW, $hContext)
$fShowContext = True
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
;----------------------------------------------------------------------------------------------------------------------
; Function _ToolTipMouseExit("text", [time [, x=-1 [, y=-1 [, "title" [, icon [, options]]]]]] )
;
; Description usual ToolTip, will be terminate with mouse move, latest after time
;
; Parameter same as used by ToolTip
; if x Or y =-1 then ToolTip will be placed at mouse position
; optional $TIME default is 3000 ms
;
; Author BugFix ([email='bugfix@autoit.de'][/email])
;----------------------------------------------------------------------------------------------------------------------
Func _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
If $TIME = -1 Then $TIME = 3000
Local $start = TimerInit(), $pos0 = MouseGetPos()
If ($x = -1) Or ($y = -1) Then
ToolTip($TEXT, $pos0[0], $pos0[1]-15, $TITLE, $ICON, $OPT)
Else
ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT)
EndIf
Do
Sleep(50)
$pos = MouseGetPos()
Until (TimerDiff($start) > $TIME) Or _
(Abs($pos[0] - $pos0[0]) > 10 Or _
Abs($pos[1] - $pos0[1]) > 10)
ToolTip('')
EndFunc ;==>_ToolTipMouseExit
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Recursive listing of files and/or folders
; Parameter(s): $sPath Basicpath of listing ('.' -current path, '..' -parent path)
; $sExt Extension for file selection '*' or -1 for all (Default)
; $iDir -1 Files+Folder(Default), 0 only Files, 1 only Folder
; optional: $iRetType 0 for Array, 1 for String as Return
; optional: $sDelim Delimiter for string return
; 0 -@CRLF (Default) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Default) or string with found pathes of files and/or folder
; Array[0] includes count of found files/folder
; 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 $strFiles = '' Then Return SetError(1,0,0)
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
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
;===============================================================================
; Function Name....: _Multi_FileListToArray
; Description......: Dateien und/oder Ordner eines Pfades auflisten, mehrere Wildcards möglich
; Parameter(s).....: $_sPath Pfad für Auflistung
; .................: $_sFilter Filter für Dateityp(en), Wildcard ist "*" (Standard), mehrere Filter möglich, trennen mit "," z.B. "jpg,jpeg,gif,png,bmp"
; .................: $_iFlag 0 (Standard) = Dateien u. Ordner, 1 = nur Dateien, 2 = nur Ordner
; .................: $_fFullPath 0 (Standard) = nur Datei/Ordnername, 1 = kpl. Pfad
; .......optional..: $_sDirChar Standard "", Zeichen(folge), die einer Ordnerausgabe vorangestellt werden kann (z.B. "[D] ")
; .......optional..: $_fStrRet 'False' (Standard), mit 'True' Rückgabe eines Chr(0) getrennten Strings, statt eines Arrays
; Return Value(s)..: Erfolg Array mit den Dateien/Ordnern, Anzahl an $a[0]
; .................: Fehler 0 @error: 1-Pfad existiert nicht; 2-Filter fehlerhaft; 3-Flag fehlerhaft; 4-nichts gefunden
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _Multi_FileListToArray($_sPath, $_sFilter='*', $_iFlag=0, $_fFullPath=0, $_sDirChar='', $_fStrRet=False)
If Not FileExists($_sPath) Then Return SetError(1,0,0)
If StringRegExp($_sFilter, '[.;\s]') Then Return SetError(2,0,0)
If $_iFlag < 0 Or $_iFlag > 2 Then Return SetError(3,0,0)
If StringRight($_sPath, 1) <> '\' Then $_sPath &= '\'
Local $fAll = False, $sFiles = '', $aFilter[2] = [1,'*'], $hSearch, $sFound, $aRet, $sSuffix, $sPath = ''
If $_fFullPath Then $sPath = $_sPath
If $_sFilter = '*' Then $fAll = True
If Not $fAll Then $aFilter = StringSplit($_sFilter, ',')
$hSearch = FileFindFirstFile($_sPath & '*.*')
While True
$sFound = FileFindNextFile($hSearch)
If @error Then ExitLoop
Switch $_iFlag
Case 0
If StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ; == alle Ordner
$sFiles &= $_sDirChar & $sPath & $sFound & Chr(0)
Else ; == Dateien Filtern
If $fAll Then
$sFiles &= $sPath & $sFound & Chr(0) ; == alle Dateien
Else
For $i = 1 To $aFilter[0] ; == Dateien aus Filter
$sSuffix = StringTrimLeft($sFound, StringInStr($sFound, '.', 1, -1))
If $aFilter[$i] = $sSuffix Then
$sFiles &= $sPath & $sFound & Chr(0)
ExitLoop
EndIf
Next
EndIf
EndIf
Case 1 ; == Dateien
If StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ContinueLoop
If $fAll Then
$sFiles &= $sPath & $sFound & Chr(0) ; == alle Dateien
Else
For $i = 1 To $aFilter[0] ; == Dateien aus Filter
$sSuffix = StringTrimLeft($sFound, StringInStr($sFound, '.', 1, -1))
If $aFilter[$i] = $sSuffix Then
$sFiles &= $sPath & $sFound & Chr(0)
ExitLoop
EndIf
Next
EndIf
Case 2 ; == Ordner
If Not StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ContinueLoop
$sFiles &= $_sDirChar & $sPath & $sFound & Chr(0)
EndSwitch
WEnd
If $_fStrRet And $sFiles <> '' Then Return StringTrimRight($sFiles, 1)
$aRet = StringSplit(StringTrimRight($sFiles, 1), Chr(0))
If @error Then Return SetError(4,0,0)
Return $aRet
EndFunc ;==> _Multi_FileListToArray
;------------------------------------------------------------------------------------------------------------
; Function _ArraySort_2ary(ByRef $ARRAY [, $DIM_1ST=0 [, $DESCENDING=0 [$REVERSE=False]]])
;
; Description sort an 2D-Array 2-ary
; BaseIndex is 0
; sort the whole array
;
; Parameter $ARRAY: Array to sort
; optional $DIM_1ST: MainSortIndex; 1st Dim. [0] or last occurence in 2nd Dim.[all other values] (default 0)
; optional $DESCENDING: Sort ascending[0]/descending[1] (default 0)
; optional $REVERSE: Sort 2nd Dimension reverse to 1st Dimension (default False)
;
; Return Succes ByRef 2-ary sorted Array
; Failure 0 set @error
; @error = 1 given array is not array
; @error = 2 given array has only 1 dimension
;
; Requirements By using numeric entry, be sure that type is "number" for correct sort
; Works with any occurences in 2nd Dimension
;
; Author BugFix ([email='bugfix@autoit.de'][/email])
;------------------------------------------------------------------------------------------------------------
Func _ArraySort_2ary(ByRef $ARRAY, $DIM_1ST=0, $DESCENDING=0, $REVERSE=False)
If ( Not IsArray($ARRAY) ) Then
SetError(1)
Return 0
EndIf
Local $FIRST = 0, $LAST, $tmpFIRST, $sortYES = 0
Local $UBound2nd = UBound($ARRAY,2)
If @error = 2 Then
SetError(2)
Return 0
EndIf
If $DIM_1ST <> 0 Then $DIM_1ST = $UBound2nd-1
Local $arTmp[1][$UBound2nd]
_ArraySort($ARRAY,$DESCENDING,0,0,$DIM_1ST)
If $REVERSE Then
Switch $DESCENDING
Case 0
$DESCENDING = 1
Case 1
$DESCENDING = 0
EndSwitch
EndIf
For $u = 0 To $UBound2nd-1
For $i = 0 To UBound($ARRAY)-1
If $sortYES = 0 Then
If $u > 0 Then
If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) And _
( $ARRAY[$i][$u-1] = $ARRAY[$i+1][$u-1] )Then
$sortYES = 1
$FIRST = $i
EndIf
Else
If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) Then
$sortYES = 1
$FIRST = $i
EndIf
EndIf
ElseIf $sortYES = 1 Then
If ( $i = UBound($ARRAY)-1 ) Or ( $ARRAY[$i][$u] <> $ARRAY[$i+1][$u] ) Then
$sortYES = 0
$LAST = $i +1
ReDim $arTmp[$LAST-$FIRST][$UBound2nd]
$tmpFIRST = $FIRST
For $k = 0 To UBound($arTmp)-1
For $l = 0 To $UBound2nd-1
$arTmp[$k][$l] = $ARRAY[$tmpFIRST][$l]
Next
$tmpFIRST += 1
Next
$tmpFIRST = $FIRST
Switch $DIM_1ST
Case 0
If $u = $UBound2nd-1 Then
_ArraySort($arTmp,$DESCENDING,0,0,$UBound2nd-1)
Else
_ArraySort($arTmp,$DESCENDING,0,0,$u+1)
EndIf
For $k = 0 To UBound($arTmp)-1
For $l = 1 To $UBound2nd-1
$ARRAY[$tmpFIRST][$l] = $arTmp[$k][$l]
Next
$tmpFIRST += 1
Next
Case $UBound2nd-1
If $u = $UBound2nd-1 Then
_ArraySort($arTmp,$DESCENDING,0,0,0)
Else
_ArraySort($arTmp,$DESCENDING,0,0,$UBound2nd-1-$u-1)
EndIf
For $k = 0 To UBound($arTmp)-1
For $l = 0 To $UBound2nd-2
$ARRAY[$tmpFIRST][$l] = $arTmp[$k][$l]
Next
$tmpFIRST += 1
Next
EndSwitch
EndIf
EndIf
Next
$sortYES = 0
Next
EndFunc ;==>_ArraySort_2ary
Hier noch ein paar Bilder:
[Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer01_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer02_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer03_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer04_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer05_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer06_t.gif]
[Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer4_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer5_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer6_t.gif]
DL bisher: 24