Dateinamen in txt kopieren

  • Hallo Leute,
    ich habe folgendes Problem, und zwar möchte ich alle Dateinamen, die ich über

    [autoit]

    FileOpenDialog('..',@MyDocumentsDir,'..(*.*)',$FD_FILEMUSTEXIST+$FD_MULTISELECT)

    [/autoit]

    öffne ohne Pfad untereinander eingetragen werden.
    Den Pfad entferne ich so:

    [autoit]

    $ohnePfad = StringRegExpReplace($mitPfad, '.+\\(.+)', '$1')

    [/autoit]


    Eintrag in txt mit:

    [autoit]

    FileWrite($hfile,$ohnePfad)

    [/autoit]


    doch leider funktioniert das nur bei einer Datei, da die übrigen Dateien mit | getrennt sind.
    Bei mehreren Dateien erfolgt keine einzige Eintragung.
    ;( Ich habe leider keinerlei Idee oder Lösungsansatz. ?(

    Vielen Dank für eure Mühe.
    Gruß Gremlin

    Einmal editiert, zuletzt von Gremlin78 (2. Oktober 2014 um 12:30)

  • Danke für deine Lösung,

    nun werden alle Dateien eingetragen, aber leider kommt bei mir sowas dabei raus:

    Ordner|datei1.txt|datei2.mp3Ordner|datei1.txt|datei2.mp3Ordner|datei1.txt|datei2.mp3 (aus irgendeinem Grund 3 mal???)

    Ich hätte es gern so (ohne Ordner):
    datei1.txt
    datei2.mp3

    Was meinst Du mit RegExp?
    Gruß Denny

  • [autoit]

    $file=FileOpenDialog('..',@MyDocumentsDir,'..(*.*)',$FD_FILEMUSTEXIST+$FD_MULTISELECT)
    $string=""
    $arFile=StringSplit($file,"|")
    local $drive,$dir,$name,$extension
    for $i=1 to UBound($arFile)-1 step 1
    _PathSplit($arFile[$i],$drive,$dir,$name,$extension)
    $string&=$name&$extension&@crlf
    next
    FileWrite($hfile,$string)

    [/autoit]

    RegExp war der Befehl

    [autoit]

    StringRegExpReplace($mitPfad, '.+\\(.+)', '$1')

    [/autoit]


    RegExp dient zum durchsuchen von Text nach bestimmten Ausdrücken (und gegebenenfalls ersetzen/auslesen, etc.). (Aber lass dir das besser von ein paar andern aus dem Forum erklären. Ich bin nicht so bewandert in RegExp ;)

  • Problem ist, dass du dir nicht genau angesehen hast in welchen Format mehrere Dateien zurückgegeben werden (Kanashuis denke ich auch nicht so wirklich^^ )
    Eine Einzelne Datei kommt einfach als voller pfad:
    LW:\Ordnerstruktur\Datei.ext
    Mehrere Dateien kommen so:
    LW:\Ordnerstruktur|Datei1.ext1|Datei2.ext2|Datei3.ext3

    D.h. bei einer Datei funktioniert dein Regex natürlich weil du ja nur alles ab dem letzten \ brauchst.
    Bei mehreren Dateien müsstest du einfach nur alles zwischen den | nehmen (nur nicht das vor dem ersten | )

    Regex geht natürlich finde ich hier aber eher etwas kompliziert.

    [autoit]

    $file=FileOpenDialog('..',@MyDocumentsDir,'..(*.*)',$FD_FILEMUSTEXIST+$FD_MULTISELECT)
    $i = StringInStr($file, '|')
    If $i Then; wenn | enthalten dann wurden mehrere dateien gewählt
    FileWrite($hfile, StringReplace(StringTrimLeft($file, $i), '|', @CRLF))
    Else
    FileWrite($hfile, StringTrimLeft($file, StringInStr($file, '\', 0, -1)))
    EndIf

    [/autoit]

    Kanashius Lösung funktioniert natürlich auch ganz gut aber die ganzen _Pathsplit braucht man nicht wenn man mehrere Dateien hat. Man braucht nur den vorderen Pfad wegschneiden und | durch @crlf ersetzen