Du kannst aber auch hier weiter schreiben, wenn es passt.
Danke. Dann hier also mal der aktuelle Status des Script. Hinweise und Tipps zum Code sind mir sehr willkommen.
AutoIt
#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <Date.au3>
; #include <StringConstants.au3>
; Variablen
Global $sTypeRaw
Global $sTypeJpg = 'jpg'; Dateiendung Jpg-Format
Global $sLogFile; Datei mit Liste der gelöschten Bilddateien.
Global $sQuellOrdner; Ordner mit Bildateien
Local $sLetztesZeichen
Local $iReturnSicherheitsabfrage
; Abfrage Raw-Dateiendungen.
$sTypeRaw = InputBox('RAW-Dateien', 'Zu berücksichtigende Raw-Dateiendungen' & @CRLF & @CRLF & 'Exakte Eingabe erforderlich', '*.arw;*.rw2;*.raf')
; Pfad Quellordner abfragen
; $sQuellOrdner = InputBox ('Quellordner','Bitte vollständigen Pfad zum gewünschten Bilderordner angeben.')
; Quellordner auswählen über Dateiauswahlbox auswählen.
$sQuellOrdner = FileSelectFolder('Bitte den Bilderordner auswählen.', '', 2)
If @error Then
MsgBox(0, '', 'Kein Ordner ausgewählt.')
EndIf
; Prüfen, ob der Pfad mit \ endet. Wenn nicht, dies ergänzen.
$sLetztesZeichen = StringRight($sQuellOrdner, 1)
If $sLetztesZeichen <> '\' Then
$sQuellOrdner = $sQuellOrdner & '\'
EndIf
;~ ; Prüfe, ob Quellordner vorhanden ist.
;~ If Not FileExists($sQuellOrdner) Then
;~ MsgBox (0,'Debug','Quellordner nicht gefunden.')
;~ Exit
;~ EndIf
; Sicherheitsabfrage anzeigen.
$iReturnSicherheitsabfrage = MsgBox(49, 'Löschen?', 'Soll das Löschen gestartet werden?')
If $iReturnSicherheitsabfrage <> 1 Then Exit
; Log-Datei (s.u.)
; Alte Log-Datei in den Papierkorb verschieben, wenn vorhanden.
$sLogFile = $sQuellOrdner & "Geloescht.log"
If FileExists($sLogFile) Then FileRecycle($sLogFile)
; Funktion zum Löschen der verwaisten Raw-Dateien aufrufen
_deleteFilesWithoutJpg($sQuellOrdner, $sTypeRaw, $sTypeJpg)
; Funktion erstellen
; Raw-Dateien ohne zugehörige Jpg-Dateien werden identifiziert und gelöscht.
Func _deleteFilesWithoutJpg($Folder, $typeR, $typeJ)
; Arrays deklariere.
Local $sDatei
Local $aListeRawDateien
Local $aTeileDateiname
Local $iIndexDateiendung
Local $sDateiEndungRaw
Local $iDateiVorhandenJpg
Local $sDateinameOhneEndung
Local $iZaehler = 0
Local $hLogFile
; Raw-Dateien in Array einlesen.
; Es werden nur Dateien, keine Ordner eingelesen.
; Unterordner werden nicht berücksichtigt.
$aListeRawDateien = _FileListToArrayRec($Folder, $typeR, 1)
; Prüfe, ob das Array erstellt wurde.
If @error = 1 Then
MsgBox(0, 'Debug', 'Fehler im Array.' & @CRLF & 'Fehlercode: ' & @extended)
Exit
EndIf
; Nacheinander Dateinamen im Array auslesen.
For $i = 1 To UBound($aListeRawDateien) - 1
$sDatei = $aListeRawDateien[$i]
; Dateinamen splitten, um Dateiendung extrahieren zu können und zwar unabhänging von der Anzahl der Zeichen der Endung
; und unabhängig davon, ob im Dateinamen mehrere Punkte enthalten sind.
$aTeileDateiname = StringSplit($sDatei, '.') ; Es wird ein Array ausgegeben.
; Das letzte Element im Array ist die Dateiendung.
; Die Anzahl der Elemente des Arrays kann variieren, wenn Dateinamen mehrere Punkte enthalten.
; Zum Extrahieren der Endung wird deshalb der Index des letzten Elementes benötigt.
$iIndexDateiendung = UBound($aTeileDateiname, 1) - 1
; Die Dateiendung aus dem Array lesen.
$sDateiEndungRaw = $aTeileDateiname[$iIndexDateiendung]
; Vollständiger Dateiname, aber ohne Dateiendung. Auch, wenn im Namen mehrere Punkte enthalten sind.
$sDateinameOhneEndung = StringTrimRight($sDatei, 1 + StringLen($sDateiEndungRaw))
; Prüfen, ob im Ordner eine gleichnamige Datei mit der Endung jpg. vorhanden ist.
$iDateiVorhandenJpg = FileExists($Folder & $sDateinameOhneEndung & '.' & $typeJ) ; Rückgabewert = 0, wenn Datei nicht existiert.
; Raw-Datei in den Papierkorb löschen, falls keine jpg-Datei vorhanden ist.
If $iDateiVorhandenJpg = 0 Then
FileRecycle($Folder & $sDateinameOhneEndung & '.' & $sDateiEndungRaw); FileDelete löscht die Datei endgültig.
; Gelöschte Dateien zählen.
$iZaehler = $iZaehler + 1
; Log-Datei schreiben.
$hLogFile = FileOpen($sLogFile, 1)
_FileWriteLog($hLogFile, $sDateinameOhneEndung & '.' & $sDateiEndungRaw) ; Write to the logfile passing the filehandle returned by FileOpen.
FileClose($hLogFile) ; Close the filehandle to release the file.
EndIf
Next
; Ausgabe Info Anzahl der gelöschten Dateien
MsgBox(48, 'Info', 'Es wurden ' & $iZaehler & ' Dateien gelöscht.')
EndFunc ;==>_deleteFilesWithoutJpg
#cs
ToDo
====
Option, die Dateien nicht zu löschen, sondern in einen Unterordner zu verschieben.
Option, endgültig Löschen oder in den Papierkorb verschieben.
Vorschau der zu löschenden Dateien.
Letzten Quellordner für den nächsten Programmaufruf merken.
GUI
Verschiedene Jpg-Dateiendungen berücksichtigen.
Unterordner einbeziehen.
#ce
Alles anzeigen