shell("dir /s") unter Windows

Startseite Foren Deutsches LiveCode-Forum shell("dir /s") unter Windows

Ansicht von 3 Antwort-Themen
  • Autor
    Beiträge
    • #4848
      gfz
      Teilnehmer

        Liebe LCer, wiedermal ich 🙂 und wieder geht es um die “Shell”- Funktion!
        Hat jemand von Euch damit unter Windows Erfahrung sammeln können?
        Ich möchte ein Verzeichnis unter Windows “überwachen” bzw. ab und an mal reinschauen und die Dateien im gewählten Verzeichnis und in den Unterverzeichnissen mit dem Letztstand vergleichen und die neuen Dateien identifizieren.
        Mein Ansatz: mit shell(“dir /S”) das Verzeichnis, das mich interessiert einlesen und abspeichern. Beim nächsten Mal mit dem gespeicherten Verzeichnislisting vergleichen, die identischen Zeilen löschen sodass die neuen überbleiben.
        Mein Problem sind die Umlaute, die teilweise durch mehrere kryptische Zeichen ersetzt werden bzw. ganz aus dem Wort verschwinden.
        textDecode(shell(“dir /S”),ENCODING) habe ich auch schon erfolglos probiert, wobei ENCODING durch einen String aus {“UTF-8″|”ASCII”|”Native”|”UTF-16″|”UTF-32″|”CP1251”} ersetzt wurde.
        Hätte noch jemand eine Idee, wie ich die Umlaute korrekt angezeigt bekommen könnte? Oder würde jemand einen anderen Ansatz für mein Vorhaben vorschlagen?
        Immer offen für konstruktive Vorschläge und Kritik,
        liebe Grüße,
        Georg

      • #4854
        gfz
        Teilnehmer

          Hat sich erübrigt, da ich eine für mich passende Lösung mit PowerShell gefunden habe.
          LG und schönes Wochenende,
          Georg

        • #4856
          Klaus Major
          Administrator

            Als nicht unbedingt Windowsnutzer (WTF ist POWERSHELL?) hätte ich das wahrscheinlich mit einem rekursiven Skript (directory walk) in LC selber gemacht. 🙂

          • #4860
            gfz
            Teilnehmer

              Hallo Klaus, danke für Deine Rückmeldung. Ja diesen Ansatz hatte ich nach vielen vergeblichen Versuchen die Umlautproblematik mit der Shell-Variante in den Griff zu bekommen auch probiert. Dazu habe ich dieses Skript aus dem Netz etwas für mich abgewandelt.

              local sInfo
              
              function listSelectedDirRecursiv pDir
                 local tF, tFList, tDir
                 set the defaultFolder to pDir
                 --
                 put "Verzeichnis: " & pDir & " Datei(en): " & the number of lines in the files & return after sInfo
                 --
                 repeat for each line tF in the files
                    put the longFilePath of tF & return after tFList
                 end repeat
                 put "Verzeichnis: " & pDir & " Verzeichnis(se): " & the number of lines in the folders & return after sInfo
                 repeat for each line tDir in the folders
                    if tDir is not "." and tDir is not ".." then
                       put listSelectedDirRecursiv(tDir) & return after tFList
                    end if
                 end repeat
                 filter tFList without empty
                 --sort lines of tFList ascending international
                 put sInfo
                 return tFList
              end listSelectedDirRecursiv
              
              on mouseUp
                 local tDir, tOut
                 --
                 answer folder "Welches Verzeichnis soll überwacht werden?"
                 put it into tDir
                 if there is a folder tDir then
                    put tDir into fld "fDoI"
                    put listSelectedDirRecursiv(tDir) into tOut
                    replace tDir with "." in tOut
                    replace slash with backslash in tOut
                    put tOut into fld "fCoDoI"
                 end if
              end mouseUp

              Leider tut das nicht ganz was ich will. Es greift zwar auf jedes Unterverzeichnis zu, aber die Anzahl der darin erkannten Dateien bzw. Unterverzeichnisse passt nicht ganz und es werden nicht alle Dateien bzw. Unterverzeichnisse ausgegeben. Fällt Dir daran ein Fehler auf?
              Ich habe ein Verzeichnis in dem sich 4 Unterverzeichnisse und etliche Dateien befinden. Die Dateien werden ausgegeben und der Inhalt des ersten Unterverzeichnisses. Dann ist Schluss. Ich vermute, dass irgendwie bei der Rückkehr in die aufrufende repeat-Schleife nicht weitergemacht wird – aber warum?
              liebe Grüße,
              Georg

          Ansicht von 3 Antwort-Themen
          • Du musst angemeldet sein, um auf dieses Thema antworten zu können.