Ordnerverzeichnis auslesen und in Array speichern, anschließendes weiterverarbeiten

  • Hallo an euch,


    ich muss ein Verzeichnis auslesen, dieses beinhaltet viele Ordner. Diese Ordnernamen muss ich weiterverarbeiten.


    Hintergrund der Geschichte:

    Ich möchte im Firefox Profilmanager viele Profile anlegen. Die Profilnamen sind bereits in Form von Ordnernamen vorliegend.


    Leider hakt es noch an mehreren Stellen im Script.

    1. Es war leider nicht möglich den Firefox Profilmanager die Buttons und Eingabebox anzuwählen. Ich musste mir damit behelfen mit AutoIT Mausklicks an der richtigen Bildschirmposition durchzuführen. Das funktioniert schon mal.

    2. Der Befehl HotKeySet wollte nicht so wirklich, ich behelfe mir vorerst indem ich nach Ablauf des Script eine 9 sekündige Pause eingefrügt habe. Wenn ich das Script im Editor mitteld F5 ausführe, funktioniert zum stoppen auch die Strg + Pause Tastenkombination. Das ist erst einmal inordnung.

    3. Die DIR Liste wird erstellt und nach Alphabet sortiert. Der Erste Eintrag im Profilmanager wird auch tadellos erstellt. Anschließend wird wieder mit der Maus navigiert und geklickt, jedoch wird nicht der nächste Ordnername eingefügt.

    Zuvor hatte die Variable zum hochzählen noch nicht in Verwendung, das war ein wirres einfügen "aller Ordnernamen" hintereinander. Nun, seit dem ich das Hochzählen über die Variable implementiert habe, geht es nach dem ersten Eintrag nicht mehr weiter.


    Gut, angefangen wird mit dem ersten Profil, bevor die DIR Liste erstellt wird, aber das bereitet hoffentlich kein Problem. Etwas wirr warr ist mein Ablauf.

    Google hat mir zwar viel weitergeholfen, aber Ihr seid immer noch die besseren.

    Lg Hans

    Einmal editiert, zuletzt von SOLVE-SMART (15. Mai 2024 um 22:40)

  • Moin,

    ich weiß nicht so recht, was Du erreichen willst. Wie ich es verstehe, soll das Skript im Profilmanager nacheinander alle vorhandenen Profile auswählen. Ist es das, was Du willst?


    AutoIt
        ; Alle Einträge kopieren, beginnend beim Startindex
        For $i = $startIndex To UBound($dirList) - 1
            ClipPut($dirList[$i])
            Send("^v")
            MouseClick("left", 1089, 722)
            $startIndex = $i + 1 ; Aktualisieren des Startindex für den nächsten Durchlauf
        Next

    Diese Schleife wird mit maximaler Geschwindigkeit ausgeführt und soll nacheinander alle vorhandenen Verzeichnisnamen in den Profilmanager kopieren. AutoIt wartet nach dem Send("^v") nicht, und der Profilmanager braucht Zeit, um die Daten aus dem Clipboard zu holen. Im schlimmsten Fall werden alle Verzeichnisnamen sich überschreibend in das Clipboard gestellt, bevor der erste Name ausgelesen wird. Die äußere While-Schleife bringt dann nichts mehr, weil Startindex auf den letzten Eintrag im Array zeigt.

    Mein Vorschlag wäre deshalb:

    • Äußere While-Schleife inklusive Sleep(9000) entfernen.
    • Nach Send("^v") etwas Zeit für die Verarbeitung einräumen.

      AutoIt
          ; Alle Einträge kopieren, beginnend beim Startindex
          For $i = 1 To UBound($dirList) - 1
              ClipPut($dirList[$i])
              Send("^v")
              Sleep(100) ; bei Bedarf verlängern
              MouseClick("left", 1089, 722)
              ; Sleep(100) ; evtl. noch eine Verarbeitungspause
          Next

    Auf gutes Gelingen,

    Velted

  • Hallo Velted,


    vielen Dank dass du dir die Zeit genommen hast,

    Zu deiner ersten Frage, nein, ich möchte nicht im Firefox Profilmanager alle Profile auswählen.

    Antwort: Ich muss im Firefox Profilmanager eine Profilliste anhand einer Liste mit Bezeichnungen anlegen.
    Die Bezeichnungen stammen aus einer Ordnerliste, keine Dateiliste.

    Zuerst muss ich die Ordnerliste einlesen, daraus die Bezeichnungen in ein Array speichern und in den Firefox Profilmanager weiterreichen.


    Ich habe nun deine beiden Pausenzeiten, die du mir empfohlen hast in das Script übernommen, danke für den Hinweis.

    Ich wusste gar nicht das die äußere While- Schleife nichts mehr bringt, weil Startindex auf den letzten Eintrag im Array zeigt. Das ist nun sehr interessant und ist so nicht gewollt. Es soll mit dem ersten Eintrag beim einfügen angefangen werden und beim letzten Eintrag ist Schluss.

    Ich kann das nun bestätigen, es wird nur der letzte Eintrag im Array in das Clipboard kopiert und dann ist Schluss.

    Wie kann ich das korrigieren? Leider bin ich nach 2h weiterer Versuche nicht dahinter gekommen.

    AutoIt
    $startIndex = $i + 1 ;
    
    ; Ich hatte auch schon folgendes versucht. Leider auch falsch:
    $startIndex =  $startIndex + 1 ;

    LG Hans

    Einmal editiert, zuletzt von SOLVE-SMART (15. Mai 2024 um 22:41)

  • Wenn ich $startIndex = $i + 1 ; auf $startIndex = $i - 1 ; ändere, werden mir zwei Profile angelegt. Das zurück zählen ist aber auch nicht die Lösung.

    Es scheint ein Problem beim hochzählen zu geben, obwohl ich da schon weiter war und alle Einträge direkt hintereinander nach und nach eingefügt wurden.


    Schlussendlich komme ich nicht weiter und bin auch eure Hilfe angewiesen.


    Einmal editiert, zuletzt von Moombas (13. Mai 2024 um 08:09) aus folgendem Grund: Nur die Formatierung des Codes auf AutoIt gestellt

  • Ich möchte eine Grundsatzfrage in den Raum werfen: Was willst du erreichen?

    Warum ich diese Frage stelle: Es gibt ggf. bessere Möglichkeiten als das über Mouseclicks zu lösen, wo du hier mit Koordinaten arbeiten musst, die auch noch Fehleranfällig sind (geänderte Bildschirmauflösung um nur mal 1 Beispiel zu nennen).

    Schau mal hier: https://wiki.mozilla.org/Firefox/Comman…le_profile_name

    Außerdem fehlt mir das .exe in Zeile 14 und der Pfad sollte in " gesetzt werden, also so: Run('"C:\Program Files\Mozilla Firefox\firefox.exe" -P')

    Aber ich denke du kannst das alles ohne Klicks aber über die CMD lösen und damit wesentlich besser und ohne die ganzen sleeps etc.

    QuD example:

    Auf error handling konnte ich jetzt nicht eingehen, da ich nicht weiß was Firefox zurück gibt wenn es nicht geklappt hat das Profil zu erstellen, da ich es hier aktuell nicht testen kann.

    3 Mal editiert, zuletzt von Moombas (13. Mai 2024 um 08:49)

  • Hallo Moombas,


    Was ich erreichen möchte, grundlegend meine Erklärung von meinem anderen Post, bei dem Du und Sven mir dankend geholfen habt.

    Im Endeffekt kostet es sehr viel Zeit ein Lauffähiges Firefox Profil anzulegen. Über den Profilmanager ein Profil erstellen, anschließend dieses Profil starten und konfigurieren sowie des weiteren eine Programmverknüpfung anzulegen, die genau dieses Profil startet.

    Da war es viel einfacher eine vor-konfigurierte Portable Firefox Version parat zu haben. Eine Kopie ist schnell erstellt und der gewünschte Name als Ordnername ebenfalls vergeben.

    Es sind nun viel zu viele Kopien die ich in Laufe der Zeit erstellt habe, darum versuche ich das alles über den ProfilManager zu migrieren.

    In Zukunft werden weiterhin Profile erstellt, diese versuche ich dann ebenfalls zu automatisieren. Bsp. ein Script, das ich ausführe, das mir nur noch nach den anzulegenden Profilnamen fragt und den Rest weitgehend alleine erledigt. Aber bis da hin muss ich erst einmal kommen.


    Mir ist bekannt das mittels Koordinaten Mausklicks diese Prozedur sehr fehleranfällig wird.

    Die Firefox Commandline Optionen waren mir unbekannt, ich hatte einige Zeit gegoogelt und fand wirklich keine Alternative zum ProfilManager. Ich hatte sogar auf gut Glück mit ein paar Kommandozeilen experimentiert, eher nach dem Motto "Auf gut Glück". Da bin ich aber nicht weiter gekommen

    Die Kommandozeilenparameter sind natürlich kommentarlos vorzuziehen.

    Das die Endung der Executable fehlt, ist in der Tat wahr. Funktioniert aber trotzdem. Firefox scheint ein registrierter Systemprozess oder wie auch immer zu sein.

    Dankeschön für für den Hinweis, wie die Zeile korrekterweise heißen soll, ich habe es soeben korrigiert.

    Ich habe nun dein Script ausgeführt, leider schüttet mich Firefox mit einer Fehlermeldung zu:

    Titel: Profil nicht vorhanden

    Text: Ihr Profil "Firefox" kann nicht geladen werden. Es ist möglicherweise nicht vorhanden oder ein Zugriff ist nicht möglich.


    Korrektur: RunWait('"C:\Program Files\Mozilla Firefox\firefox" -no-remote -CreateProfile ' & $dirList[$Row] & '"')

    Ich musste das Anführungszeichen nach CreateProfile " entfernen, jetzt werden die Profilnamen übergeben. Das Anführungszeichen wäre korrekt wenn anschließend der Zielpfad für das neue Profil angehängt wird.


    Merkwürdigerweise werden aber Profilnamen ohne Leerzeichen tadellos erstellt, Namen mit Leerzeichen werden ab dieses abgekürzt. Bsp: Neuer User, es wird nur Neuer erstellt.

    Es gibt aber auch keinen Unterschied zum Windows Ausführen (Win + R". Ich werde die Tage noch einmal herumprobieren, es ist schon wieder sehr spät geworden.

    Du hast mich schon so nahe ans Ziel gebracht.


    Lg Hans

  • Ja das mit den Leerzeichen im Namen ist ein Problem (steht so aber auch in der Doku), deswegen j´hatte ich gehofft mit der Verwendung der " das zu umgehen, frei nach dem Motto "wenn kein Profilordner angegeben wurde, nehme den Default-Ordner"

    Aber um das zu fixen, prüfe doch mal bei einem Gerät wenn du erfolgreich Profile (ohne ") erstellst wo diese abgelegt werden, und gebe dann den entsprechenden Pfad mit bei Verwendung der ", dann deckst du alle Möglichkeiten ab.

  • Moin,

    Firefox/CommandLineOptions

    Für beide beschriebenen Formen von -CreateProfile steht da, "... the profile_name must not contain spaces ( )" bzw. "... (as with the previous syntax, profile_name must not contain spaces)".

    Der Versuch, einen Ordnernamen anzuhängen, mag deshalb erfolglos bleiben.

  • Ok, dann habe ich das dort überlesen und du ( Velted) hast natürlich absolut recht :D

    Aber schon etwas merkwürdig, da es sich dann danach anhört, als wären Leerzeichen im Profilnamen generell untersagt...

    Eine andere Idee um das dann zu umgehen wäre die Leerzeichen z.B. mit _ zu ersetzen befor das Profil erstellt wird.
    Also aus Ordnername "User Name" wird der Profilname "User_Name" erstellt.

  • Hallo!


    Moombas jetzt verstehe ich was du vor hattest.

    Ich habe nun eine kurze Überprüfung ausgeübt, das Ergebnis ist sehr interessant.

    Über die GUI vom Firefox Profilmanager kann man bei den zu erstellenden Profilen Leerzeichen nach Lust und Laune vergeben, auch mehrere in einem Profilnamen.

    Die Profile werden korrekt eingetragen und die abgespeicherten Verzeichnisse auf der Festplatte beinhalten auch die vergebenen Leerzeichen.

    Über den Kommandozeilen - Profilmanager funktioniert das hingegen leider nicht.

    Schlussendlich wird eine INI Datei angelegt, die mir alle Profile aufweist.


    Zu erwähnen ist noch, das jedes erzeugte Profil eine 8- Stellige zufallsgenerierte Buchstabenkombination enthält, gefolgt von einem Punkt und dann der Profilname, den man vergeben hat. Nachfolgend weitere Erkenntnisse die ich heruausgefunden habe.


    Mir fällt also als dritte Möglichkeit ein, die INI Datei selbst zu editieren. Man könnte die INI Datei selber aufbauen oder alle Leerzeichen der Profilnamen durch andere Zeichen ersetzen, anschließend die Ini Datei editieren und die austauschzeichen Zeichen wieder gegen Leerzeichen ersetzen. Das kann dann noch optional mit den angelegten Profilordnern wiederholt werden, dazu weiter unten mehr.


    Das ganze ist jetzt ziemlich verflixt. Etwa die Hälfte an meinen Portablen Instanzen beinhalten Leerzeichen, die ich der Übersichtshalber schon gerne in den Profilmanager mit übersiedeln möchte.

    Die Leerzeichen in den Profilordnern möchte ich auch deshalb gerne haben, da sie korrekt in meiner Dateisuchmaschine gefunden werden und nicht verdeckt bleiben.


    Auto-IT Schritte bis jetzt:

    1. GUI Profilmanager aufrufen und per AutoIT editieren (funktioniert noch nicht korrekt)

    2. Profilmanager über Kommandozeilenparameter steuern (hat Einschränkungen bezüglich Leerzeichen)

    3. weitere Möglichkeit: INI Datei mittels AutoIT aufbauen, oder Profilmanager mittels Kommandozeilenparameter bedienen, Leerzeichen durch andere Zeichen ersetzen und anschließend diese durch einlesen der INI Datei patchen, ident auch die Ordnerstruktur patchen.


    Ich werde jetzt noch ein bischen herumprobieren, vielleicht fällt mir noch etwas auf.


    Testversuche:

    Profilmanager GUI, angelegtes Profil namens "S A"

    [Profile14]
    Name=S A
    IsRelative=1
    Path=Profiles/jrqjljel.S A


    anschließendes umbenennen des Profiles "S A" in "S-A" mittels Profilmanager GUI

    [Profile14]
    Name=S-A
    IsRelative=1
    Path=Profiles/jrqjljel.S A


    Standardmäßig werden Profile in folgendes Verzeichnis abgelegt:

    %AppData%\Mozilla\Firefox\Profiles


    im konkreten fall sieht es so aus:

    %AppData%\Mozilla\Firefox\Profiles\jrqjljel.S A


    Ich habe ein Profil erstellt, und dabei ein neues Verzeichnis (nicht das standard Verzeichnis) angegeben:

    [Profile16]
    Name=Test Profil
    IsRelative=0
    Path=E:\TMP

    Was mir hierbei aufgefallen ist, die Profildateien befinden sich nun direkt in E:\TMP\ Ein Unterordner für das Profil wird nicht eigens erstellt, ich muss diesen schon selber angeben. Das erklärt nicht wieso Firefox Profilmanager diese Zufalls Buchstabenkombination vor jedem Profilnamen generiert, da sie hier den Anschein erwecken, nicht gebraucht zu werden. Das würde jetzt einiges erleichtern.


    Wenn ich ein Profil erstelle, enthält dieses zu Beginn nur eine Json Datei. Erst wenn das Profil das erste mal gestartet wird, baut Firefox den Datei und Ordnerinhalt das erste mal auf. Das kann ich auch überspringen indem ich ein bestehendes Firefoxprofil (Protable Version) dort hineinkopiere, dabei wird auch die Json Datei ersetzt, da sie mitkopiert wird.


    LG Hans

  • Hallo!

    Ist nicht ganz ein AutIT-Thema aber Profile für den Firefox lassen sich sehr leicht und und Profilemanager mit vernünftigen Namen erstellen.

    Wichtig ist nur die Ordnerstruktur zu behalten und ein paar Konfigdateien das richtige hinschrieben. Solltest Du für andere Benutzer die Profiles vorab anlegen wollen, dann musst noch ein bisschen mit den Dateirechten herumspielen (ACLs), ist aber nicht wild.....

    meiner persönlichen Meinung ist das Profilemanager zum schmeissen...

    lg

    Racer