Datei in C: suchen

  • Hi,

    Forensuche hab ich schon benutzt, schlau bin ich aber nicht draus geworden.

    Wie kann ich ganz normal eine Datei auf C: suchen?

    Wenn ich es mit FileFindFirstFile mache, sucht er nur in dem Ordner, wo sich das Script befindet.

    MFG

    D.

    2 Mal editiert, zuletzt von Desaster (7. August 2008 um 15:47)

  • Habe das Skript auch getestet und es funktioniert einwandfrei.

    Ich würde nur gerne mehre Dateien mit dem gleichen Namen suchen was muss ichdann an dem Skript verändern.

    Also Bsp.: Ich würde gerne das er komplett C:\ durchsucht und mir alle test.txt anzeigt die es gibt.

    Problem ist folgendes, bei uns in der Firma gibt es ein Programm in dem ein INI-Eintrag geändert werden muss. Allerdings legt das Programm bei der Installation verschiedene Ordner an. Manchmal sind diese INI's Gott weis warum irgendwo auf der Platte. Dort müsste aber nun ein Pfad geändert werden deshalb wäre es schön zu wissen was ich dort ändern muss.

    LG

    Schnuecks

    • Offizieller Beitrag

    Probir mal so:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $PathFound = ""
    Dim $Datei = "1.txt"
    Dim $Ordner = 'c:\Downloads\AutoIt-Skripte\'
    $re = _RecursiveFileSearch($Datei, $Ordner)
    If Not @error Then
    $splitted = StringSplit($re, '|')
    _ArrayDisplay($splitted)
    Else
    MsgBox(16, 'ERROR', $re)
    EndIf

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

    ;--------------------------------------------------------------------------------------------------
    ; 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])
    ;--------------------------------------------------------------------------------------------------

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

    Func _RecursiveFileSearch($FILE, $SEARCHFOLDER)
    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 StringTrimRight($PathFound, 1)
    EndFunc ;==>_RecursiveFileSearch
    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 ;==>ShowSubFolders
    ; ==>_RecursiveFileSearch

    [/autoit]

    Mega

  • Das funktioniert schon mal bestens.

    Er findet schonmal alle das klappt. Da es sich um INI Dateien handel wollte ich IniWrite benutzen.

    Wie kann ich ihm sagen das er in allen gefundenen Dateien die Änderung durchführt?

    Bei einer wärs ja kein Problem mit Arrays hab ichs noch nicht so ^^


    LG

    Schnuecks

  • Mit einer For NExt Schleife ist soweit klar. Wie bekomme ich das was ich mit _ArrayDisplay angezeigt bekomme in ein Array welches ich dann auslesen kann?

    Sorry für die Blödfragen.

    LG

    Schnuecks

    Einmal editiert, zuletzt von Schnuecks (26. November 2008 um 15:26)

  • Hab es jetzt so gelöst wie ich es wollte. Er soll alle Dateien mit dem Namen finden soll in der Ini schauen ob der Key vorhanden ist und wenn ja den Key ändern.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $PathFound = ""
    Dim $Datei = "test.ini"
    Dim $Ordner = 'e:\'
    $re = _RecursiveFileSearch($Datei, $Ordner)
    If Not @error Then
    $splitted = StringSplit($re, '|')
    For $i = 1 To UBound($splitted) -1
    $ini = IniRead($splitted[$i],"Sektion","Key","")
    If not $ini = @error Then
    IniWrite($splitted[$i],"Sektion", "Key","Wert")
    EndIf
    Next
    Else
    MsgBox(16, 'ERROR', $re)
    EndIf

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

    ;--------------------------------------------------------------------------------------------------
    ; 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])
    ;--------------------------------------------------------------------------------------------------

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

    Func _RecursiveFileSearch($FILE, $SEARCHFOLDER)
    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 StringTrimRight($PathFound, 1)
    EndFunc ;==>_RecursiveFileSearch
    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 ;==>ShowSubFolders

    [/autoit]

    Vielen lieben Dank an Mega an dieser Stelle ^^