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
      Verwalter

      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.