Hallo, ich habe folgendes Script und versuche damit mehrere Dateien mit dem gleichen Namen, in diesem Fall test.txt, zu löschen.
Folgendes Problem:
Er löscht immer nur die Datei, die er als letztes gefunden hat.
Raupi und SEuBo konnten mir noch nicht richtig helfen.
SEuBo hat zwar bereits ein Script mit einer anderen UDF gezeigt, welches aus funktioniert, aber länger dauert.
Das lässt sich sicherlich noch optimieren.
Hier das Script:
Spoiler anzeigen
#Include <Array.au3>
$Datei = "test.txt"
Dim $aResult[1]
Global $Result
$var = DriveGetDrive( "FIXED" )
If NOT @error Then
For $i = 1 to $var[0]
If $var[$i] = "a:" or $var[$i] = "b:" Then ContinueLoop
$Result= _RecursiveFileSearch($Datei, $var[$i]&"\")
If $Result <> 4 Then
_ArrayAdd($aResult,$Result)
Endif
Next
EndIf
_ArrayDisplay($aResult)
For $i = 1 to UBound ($aResult)-1
FileDelete($aResult[$i])
Next
;--------------------------------------------------------------------------------------------------
; Funktion _RecursiveFileSearch($FILE, $SEARCHFOLDER)
;
; Beschreibung Sucht nach vorgegebener Datei in einem Ordner rekursiv
;
; Parameter $FILE: zu suchende Datei
; $SEARCHFOLDER: Ordner für Suchstart
;
; Rückgabe Erfolg: Pfad der gesuchten Datei
; @error = 0
; Fehler: 1-kein Dateiname / 2-kein Ordnername übergeben (3-beides); 4-Datei nicht vorhanden
; @error = 1
;
; Autor BugFix ([email='bugfix@autoit.de'][/email])
;--------------------------------------------------------------------------------------------------
Func _RecursiveFileSearch($FILE, $SEARCHFOLDER)
Global $PathFound = ""
Dim $Fehler = 0
If $FILE = "" Then
SetError(1)
$Fehler += 1
EndIf
If $SEARCHFOLDER = "" Then
SetError(1)
$Fehler += 2
EndIf
If @error Then Return $Fehler
$FSO = ObjCreate("Scripting.FileSystemObject")
ShowSubfolders( $FSO.GetFolder($SEARCHFOLDER), $FILE )
If $PathFound = "" Then
SetError(1)
$Fehler = 4
Return $Fehler
Else
SetError(0)
EndIf
Return $PathFound
EndFunc
Func ShowSubFolders($Folder, $FILE)
For $Subfolder in $Folder.SubFolders
If FileExists($Subfolder.Path & "\" & $FILE) Then
$PathFound = $Subfolder.Path & "\" & $FILE
ExitLoop
EndIf
ShowSubFolders( $Subfolder, $FILE )
Next
EndFunc
; ==>_RecursiveFileSearch
MfG
PS: Bei ArrayDisplay zeigt er noch nicht einmal den richtigen Pfad, von der einzigen gefundenen Datei an, obwohl er die eine von den zweien löscht.