Wenn ordner nicht vorhanden, zum nächstern springen

  • Folgendes Script:


    Auf einem netzlaufwerk existieren Ordner die aus Nummern bestehen.
    Mittels eines Button möchte ich nun einen Ordner vorwärts bzw. Rückwerts blättern.
    Es sollen jedoch nur die Ordner angezeigt werden die auch wirklich existieren. Alle anderen Nummern sollen übersprungen werden.

    Das Script funktioniert soweit, jedoch springt er nicht direkt zu dem existierenden Ordner.

    Kann mir da jemand helfen?

  • Wenn ich Funktion zurueck aufrufe, dann möchte ich gerne zum existierenden Ordner wechseln.

    • Offizieller Beitrag

    Du musst die Funktion etwas abändern:

    AutoIt
    Func zurueck()
    	Local $knummer = GUICtrlRead($input_sknummer)
    	Local $ordnerpfad
    	Do
    		$knummer -= 1
    		$ordnerpfad = "\\Brzg.local\shares\PIV\KONF\BRZ\PAR\" & $knummer
    	Until FileExists($ordnerpfad)
    	GUICtrlSetData($input_sknummer,$knummer)
    	read()
    EndFunc

    Edit: Eventuell noch eine Abbruchbedingung, wenn es kein weiteres Zurück mehr gibt. Die hängt dann von der Ordnerstruktur ab.

  • danke, das funktioniert grundsätzlich, aber recht langsam wenn größere Ordnersprünge sind.
    Könnte man das irgendwie beschleunigen?

    Eventuell die komplette Verzeichnisstruktur ein mal einlesen und dann die vorhandenen Ordnerzahlen durchgehen?

    • Offizieller Beitrag

    Eventuell die komplette Verzeichnisstruktur ein mal einlesen und dann die vorhandenen Ordnerzahlen durchgehen?

    Genau, mach das. Und beim Bewegen zwischen den Ordnern nutzt du dann den Array-Index des Arrays mit allen Pfaden. Vereinfacht auch die Fehlerabfragen: kein If FileExists notwendig, Anfang und Ende sagen dir Index=0 (oder 1, je nachdem, ob du die Pfadanzahl an [0] führst oder nicht) und Ubound.

  • So meinte @BugFix das...

    Prev-Next Dir

    3 Mal editiert, zuletzt von Bitnugger (20. März 2017 um 14:58)

  • danke!

    ich versuche das gerade in mein Programm einzupflanzen.

    Wozu genau benötigt man diese Variable:
    Global $g_iCurrentDir = 1, $g_hGUI, $input_sknummer, $button_zurueck, $button_vor

    Die setzt sich aus dem GUI-fenster, dem Nummernfeld und Vor und Zurück Button zusammen.
    Oder was genau macht die?

    ist da ein Schreibfehler drinn, weil die Variable $g_idInput_skNummer gibt es ja sonst nicht.

  • Wozu genau benötigt man diese Variable:
    Global $g_iCurrentDir = 1, $g_hGUI, $input_sknummer, $button_zurueck, $button_vor


    In dieser Zeile habe ich 5 Variablen deklariert...
    Das GUI-Handle benötigst du, wenn du deine GUI z. B. minimieren willst. Z. B.: GUISetState($g_hGUI, @SW_MINIMIZE)
    Die Control-IDs benötigst du, damit du in der Select-Loop-Schleife auswerten kannst, ob eines der Controls (einer der Buttons) angeklickt wurde.
    $g_iCurrentDir = In dieser Variablen steht immer der Index des aktuell angezeigten Verzeichnisses in dem Array $g_aDirList
    $g_hGUI = Handle der GUI ; wird hier nicht verwendet, ist bei mir aber Usus.
    $g_idInput_skNr = ID des Input-Controls für die Anzeige des Index: [Index des angezeigten Verzeichnisses in $g_aDirList / Anzahl der Verzeichnisse in $g_aDirList]
    $g_idButton_Prev = ID des Button-Controls (Vorheriges Verzeichnis), mit dem du den Index des Verzeichnisses um 1 veringern kannst.
    $g_idButton_Next = ID des Button-Controls (Nächstes Verzeichnis), mit dem du den Index des Verzeichnisses um 1 erhöhen kannst.

    ist da ein Schreibfehler drinn, weil die Variable $g_idInput_skNummer gibt es ja sonst nicht.

    Jeep, das ist ein Dummfehler... und $g_idInput_Dir habe ich gar nicht deklariert... ;)

    Wenn du folgende Zeile an den Anfang deiner Scripte setzt, passiert dir sowas nicht:

    AutoIt
    Opt('MustDeclareVars', 1)


    Ich hab das Script nun aktualisiert und diese marginalen Fehler behoben.

    9 Mal editiert, zuletzt von Bitnugger (20. März 2017 um 15:17)

  • ok, danke.

    jetzt hätte ich noch einen Wunsch:

    Wenn ich die Ordnernummer im Feld $g_idInput_skNr manuell eingebe, soll der Ordner-Zähler auch gleich dort hin springen und mit VOR und ZURÜCK ab dieser Zahl zählen.

  • jetzt hätte ich noch einen Wunsch:

    Wenn ich die Ordnernummer im Feld $g_idInput_skNr manuell eingebe, soll der Ordner-Zähler auch gleich dort hin springen und mit VOR und ZURÜCK ab dieser Zahl zählen.

    Ok...

    F2 = Fokus auf $g_idInput_skNr setzen
    F5 = Index auf 1 setzen
    F6 = Index auf $g_aDirList[0] setzen (letztes Verzeichnis)

    Edit: Habe noch ein paar kleine Änderungen gemacht...

    Prev-Next Dir 2

    3 Mal editiert, zuletzt von Bitnugger (20. März 2017 um 16:29)

  • Ich würde aber gerne die Nummer des eigentlichen Ordners suchen können also nicht Nummer der ordnerzahl.
    Wenn du weißt was ich meine.

    Ja, weiß ich. Ich werde dir das noch einbauen... dafür muss ich den Code aber komplett umbauen... in ca. 1-3 Stunden werde ich es wohl fertig haben.