Alle dateien auf einem Laufwerk suchen

  • Moin

    Habe folgendes Problem...
    Möchte gerne alle Word dateien + Pfad auf einem Laufwerk finden und z.b in eine Txt oder array speichern...

    ich habe das bis jetzt so gemacht...

    [autoit]


    $verzeichnis = 'C:\'
    _RunDOS ('dir '&$verzeichnis&' /s /b /a:-d > temp.txt')

    [/autoit]


    Und dann alles was .doc enthält rausfiltern lassen

    Nachteil ist hier nur das der mir z.B bei einer Datei C:\....\desktop\Schäfer\Schäfer.doc
    das hier bei raus kommt
    C:\....\desktop\Sch„fer\Sch„fer.doc

    er ersetzt also Umlaute wie ä,ö,ü in irgendwelche anderen Zeichen um.
    das wird wohl von dem DOS befehl kommen...
    wie kann ich das jetzt verändern oder kann man das nur mit Autoit machen?

    Vielen dank für die Hilfe

    MFG chris :tongue:

    • Offizieller Beitrag

    Hi,

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    Global $found_A[1]

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

    Search("c:\Downloads", "doc");replace with your search directory and file extension required

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

    _ArrayDisplay($found_A)

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

    Func Search($current, $ext)
    Local $search = FileFindFirstFile($current & "\*.*")
    While 1
    Local $file = FileFindNextFile($search)
    If @error Or StringLen($file) < 1 Then ExitLoop
    If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
    If StringRight($current & "\" & $file, StringLen($ext)) = $ext Then
    ;MsgBox(0, "Dateiendung " & $ext, $current & "\" & $file)
    ; Hier kopieren, löschen, umbennen etc.
    _ArrayAdd($found_A, $current & "\" & $file)
    EndIf
    EndIf
    If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
    Search($current & "\" & $file, $ext)
    EndIf
    WEnd
    FileClose($search)
    EndFunc ;==>Search

    [/autoit]

    So long,

    Mega

  • verstanden habe ichs schon nur das alle Versuche die ich gestartet habe nicht geklappt haben... aber du wirst lachen so ähnlich hatte ich es schon getestet^^
    Manchmal denkt man einfach nicht weiter.... :P

    Vielen dank nochmal^^

    MFG chris :D

    PS: hänge aber schon wieder am nächsten Problem... omg aber werde es erst mal alleine versuchen...

  • Moin

    Nein leider noch nicht wirklich...?(
    Mein jetztiges problem liegt darin eine Suchfunktion in einer Liste ähnlich der suchfunktion in Winamp wenn man "J" drückt zu kontruieren.:P d.h.

    Habe hier z.B "sende" eigegeben... jetzt soll die liste während ich das eingebe schon durchsucht werden
    wenn icherst "se" eingegeben habe sollenalle wörter die se enthalten angezeigt werden und die anderen nicht ^^
    und alle die sachen die sende nicht enthalten sollen aus der liste entfert werden.
    d.h. das inputfeld muss auf tastendrücke regieren und dann die liste duchsuchen...
    Halt genau so wie die Winamp funktion.... (wenn man "j" drückt )
    [Blockierte Grafik: http://img160.imageshack.us/img160/5246/bild1tg4.png]

    So jetzt weißt du wo ich hänge ^^ bessergesagt ich habe noch gar keinen richtigen anfang dazu gefunden^^ Bin noch nicht so lange dabei mit Autoit zu basteln ^^.
    Aber ich denke mal das das wenns fertig wird nen verdammt nützliches tool wird...

    Hier ist die test.txt wo der inhalt der doc dateinen drinne ist.

    EDIT:
    Die Einträge in der test.txt sind ja mit Pfad angeordnet. In der liste würde dies aber nur stören deshalb habe ich sie entfernt.... ca. so

    Spoiler anzeigen
    [autoit]


    _FileReadToArray ('test.txt',$found_A)
    ;################################################################################## Verzeichnisse entfernen
    Global $found_B[1]
    $i='0'
    Do
    $i = $i +1
    $teilen1 = StringSplit ($found_A[$i],'\')
    ;_ArrayDisplay ($teilen1)
    _ArrayAdd ($found_B,$teilen1[$teilen1[0]])
    ;_ArrayDisplay ($found_B)
    Until $i == $found_A[0]
    $found_B[0] = UBound($found_B)-1
    ;_ArrayDisplay ($found_B)
    ;################################################################################## / Verzeichnisse entfernen
    ;################################################################################## Für Liste Fertig machen
    $i='0'
    $List_inhalt =''
    Do
    $i = $i +1
    $List_inhalt = $List_inhalt&$found_b[$i]&'|'
    Until $i == $found_b[0]
    ;MsgBox (0,"",$List_inhalt)
    ;################################################################################## / Für Liste Fertig machen

    [/autoit]

    So Problem ist nur das wenn ich die datei jetzt öffnen will fehlt mir ja der pfad... wie mache ich das am besten das in der liste nur die *.doc stehen aber im array noch der PFAD\*.doc vorhanden ist?

    MFG chris:D