Startseite › Foren › Deutsches LiveCode-Forum › shell("dir /s") unter Windows
- Dieses Thema hat 3 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren, 6 Monaten von gfz.
-
AutorBeiträge
-
-
März 23, 2018 um 20:04 Uhr #4848
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 -
März 24, 2018 um 10:36 Uhr #4854
Hat sich erübrigt, da ich eine für mich passende Lösung mit PowerShell gefunden habe.
LG und schönes Wochenende,
Georg -
März 24, 2018 um 13:53 Uhr #4856
Als nicht unbedingt Windowsnutzer (WTF ist POWERSHELL?) hätte ich das wahrscheinlich mit einem rekursiven Skript (directory walk) in LC selber gemacht. 🙂
-
März 24, 2018 um 17:31 Uhr #4860
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
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.