Frage zu StringReplace und Laufwerkauswahl mit AutoIt

  • Hallo,

    ich benötige nochmals Hilfe. Im folgenden Code ist ein Beispiel enthalten, was zeigen soll was ich eigentlich möchte. Keine Ahnung ob das jemand nachvollziehen kann.
    Zur Erklärung was ich nun versuche mit Worten zu erklären.

    1. Laufwerkauswahl mit AutoIt:
    Ich möchte, dass anstatt Ordner, nur Laufwerke beim Klick auf "Laufwerk auswählen" angezeigt werden. Geht das denn überhaupt? Ich nutze gerade @HomeDrive doch das ist wenig befriedigend.

    2. StringReplace:
    Ist es für Euch möglich, mir ein gutes Beispiel zu nennen, bei dem alle Festplattenlaufwerke von A-Z, (vorausgesetzt, wenn die diese vom Nutzer ausgewählt werden) in der Inputbox anstatt mit z. B. C:\ oder D:\ oder E:\ ohne "\" am Ende ausgegeben werden.

    Wie gesagt, der Code im Anhang soll eher mehr verdeutlichen was ich möchte.
    So würde es theoretisch auch funktionieren, was ich vorhabe, aber eben ohne Punkt 1 zu berücksichtigen und ohne zu Wissen, wie ich Laufwerk A-Z sinnvoll in der Inputbox ohne "\" ausgeben kann.

  • Wenn du das Laufwerk selbst hast, und der Pfad z.B. "C:\" ist, dann sollte das mit

    AutoIt
    StringReplace($drive, "\\", ""); Oder nur ein Backslash? Kann das grad nicht testen

    erledigt sein.

    Mit

    AutoIt
    DriveGetDrive($DT_ALL)
    ;Siehe: 
    ;https://www.autoitscript.com/autoit3/docs/functions/DriveGetDrive.htm

    bekommst du eine Liste aller Laufwerke.
    Du könntest dann eine GUI bauen, in der die Laufwerke aufgelistet sind, bei der man sich dann durch Klick auf das jeweilige Laufwerk entscheidet, welches man will.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Hallo Xoriantor,

    zu 1.:
    Der Nutzer soll ja sein Laufwerk auswählen können. Daher fragte ich ja nach einer besseren Möglichkeit.

    zu 2.:

    AutoIt
    Local $AlleLaufwerke = DriveGetDrive($DT_ALL)
    Local $laufwerkwahl_1 = FileSelectFolder("Ordner wählen", $AlleLaufwerke, "", "", $g_hGUI)


    Leider startet DriveGetDrive($DT_ALL) im @DesktopDir. Jedoch sieht dabei & $DT_REMOVABLE genauso aus wie & $DT_REMOVABLE oder auch beide zusammen.

    Ich nutze Win10x64. Keine Ahnung ob es damit zusammenhängt oder ob mir FileSelectFolder dabei einen Strich durch die Rechung macht.

    zu 3.:

    Zitat von Xoriantor

    Du könntest dann eine GUI bauen, in der die Laufwerke aufgelistet sind, bei der man sich dann durch Klick auf das jeweilige Laufwerk entscheidet, welches man will.

    Das würde bestimmt die vernünftigste Lösung sein, jedoch sollen nur die Laufwerke auswählbar sein und nicht deren Verzeichnisse, wie es momentan bei mir mit DriveGetDrive($DT_ALL) leider ist. Ein FileSelectDrive wäre ideal aber das gbt es ja nicht. X/ Leider.

  • Hey. ich hab dein Script mal modifiziert. Aus dem Button zur Auswahl wurde eine Combobox...

    Alles unnötige hab ich ausgeklammert und am Scriptende ist eine neue Funktion hinzu gekommen: __Laufwerke__()
    Diese sorgt dafür, dass die Combo mit allen "Festplatten" zur Auswahl befüllt wird. Aufruf 1malig in Zeile 35

  • Hallo Lottich,

    das ist die genau die Lösung für mein Vorhaben, welche ich benötigt habe. Herzlichen Dank.

    Ein paar Zeilen Code haben mir den Abend und sicher auch eine Menge an Freizeit gerettet. :party:


    @Xoriantor: Auch Dir vielen Dank für Deine Hilfe. :)

    Mein Fazit für heute:
    AutoIt hat so viele Möglichkeiten..... Dies wird durch die Arbeitsweise verschiedenster Benutzer mehr als deutlich. Faszinierend!

  • Hallo

    Der gepostete Code mit DriveGetDrive($DT_Fixed)zeigt alle Festplatten-Laufwerke an. Mit $DT_REMOVABLE ("REMOVABLE") bekomme ich auch meine eingesteckten USB Geräte angezeit.

    Gibt es eine Möglichkeit, aus der Laufwerksanzeige z. B. USB-Stifte, DigitalCam und SSD-Laufwerke auszufiltern / zu entfernen?

  • Das Array durchsuchen, weitere Infos (DriveStatus, DriveGetType etc.) zum Device einholen und bei Bedarf aus Array löschen.

    Hier noch ein Skript-Auszug:

    Einmal editiert, zuletzt von autoBert (3. April 2016 um 18:53)