Sonderzeichen beim Verzeichniss auslede.

  • Hallo Leute

    ich habe mal wieder ein kleines Problem das mich in den Wahnsinn treibt.
    Für euch wahrscheinlich eine Kleinigkeit.

    Ich lese mit folgendem

    RunWait(@ComSpec & " /c " & "dir /B /S " & $srcpath & ">>" & @ScriptDir & "\" & $tempdir & "\Filter.log", "", @SW_HIDE)

    einen Pfad aus und schreibe diesen in ein Verzeichnis.

    Funktioniert ohne Problem bis auf die Sonderzeichen wie ÄÖÜ usw. die werden
    falsch interpretiert.

    Hat jemand eine Idee wie ich das umgehen kann oder eine andere Möglichkein Verzeichnisse mit Unterverzeichnissen auszulesen.

    Gruß

    Mc Baldrian.

    Solange
    du den anderen sein Anderssein nicht verzeihen kannst, bist du noch weit ab vom
    Wege der Weisheit.

    Einmal editiert, zuletzt von mcbaldrian (26. März 2013 um 14:05)

  • Hi,

    das funktioniert, indem du in der DOS-Box den DIR blablub-Befehl in eine Batchdatei schreibst.
    In der ersten Zeile dieser Batchdatei änderst du dann die Codepage mit:

    chcp 1252

    Die Änderung der Codepage bewirkt die "Zeichenumwandlung", und bleibt nur so lange bestehen, wie die CMD läuft...
    Problem bei dieser Lösung ist, dass du bei Eingaben in der CMD dann die Sonderzeichen nicht mehr verwenden kannst, d.h. bei einem
    DIR /b /n > test.txt
    werden nun auch Dateien mit Sonderzeichen im Namen in die Textdatei geschrieben, allerdings funktionieren die Sonderzeichen ggf im @scriptdir nicht mehr^^
    Wenn in Scriptdir "Sonderzeichen" bspw. das "Ä" in c:\test\ÄÄ\vv wäre, dann gibts Ärger...
    Hab den Mist hinter mir, daher einen 3-Zeiler in AutoIt geschrieben, der die Funktion erfüllt, welche in der RUN-Zeile ausgeführt wird...

  • Hallo,

    beispiel für lösung:

    Spoiler anzeigen
    [autoit]

    Local $srcpath = 'H:\*.*'
    Local $tempdir = '\Test'
    Local $F_op, $Run, $line, $Ers

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

    $Run = Run(@ComSpec & " /c " & "dir /B /S " & $srcpath, @ScriptDir, @SW_HIDE, 2)

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

    While 1
    $line &= StdoutRead($Run, 0, 0)
    If @error Then ExitLoop
    $Ers = StringReplace(StringReplace(StringReplace(StringReplace(StringReplace(StringReplace(StringReplace($line, Chr(154), 'Ü'), Chr(129), 'ü'), Chr(153), 'Ö'), Chr(148), 'ö'), Chr(142), 'Ä'), Chr(132), 'ä'), Chr(225), 'ß')
    WEnd

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

    $F_op = FileOpen(@ScriptDir & $tempdir & "\Filter.log", 2)
    FileWrite($F_op, $Ers)
    FileClose($F_op)

    [/autoit]


    Lg
    Kleiner