Beiträge von alpines

    Übrigens gibt es für AutoIt eine MySQL-UDF, so musst du keine Aufrufe über die Shell machen sondern kannst dich direkt auf den DBS verbinden und deine Queries absenden.

    Und ich verstehe dein Shellaufruf nicht ganz. Das Chr(34) sind ja Gänsefüßchen.


    Dein Aufruf wäre also folgender:

    'cmd.exe /c mysqladmin -u root ""ALTER DATABASE ' & $neuerprojektname & ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'

    Müsste es aber nicht:

    'cmd.exe /c mysqladmin -u root "ALTER DATABASE ' & $neuerprojektname & ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"'

    sein?

    Doch das funktioniert, nur hast du tausend andere Syntaxfehler und greifst immer noch auf den falschen Index zu.

    Du versuchst den String im ArrayDisplay anzuzeigen weil es der falsche Index ist.


    Hier mal mit allen Fehlern gefixt. Der SyntaxChecker ist übrigens nicht zum Spaß da, lies dir mal die Fehlermeldungen durch wenn du nicht verstehst warum es nicht klappt ;)

    For $i = 1 To 5

    Arrays werden in AutoIt von 0 indexiert. Du greifst aber auf Index 1 zu. Der 5. Index wäre somit out of Bounds.

    Du musst also von 0 bis 4 laufen. Und wenn du dir die Zahlen nicht merken willst, UBound() gibt dir die Anzahl der Elemente zurück.

    Du kannst in AutoIt auch keine Arrayfelder beschreiben, nur einzelne Indizes. Bei einem zweidimensionalen Array musst du dafür durch die zweite Dimension mit einer For-Schleife durchlaufen, oder du weist beide Indizes einfach untereinander zu, weil es ja nur zwei Werte sind.

    Code
    1. $_array[$i][0] = $_subarray
    2. $_array[$i][1] = 'Lorem'

    Du speicherst ein Array in einem Array, deshalb musst du das explizit referenzieren ansonsten greifst du auf ein drei-dimensionales (oder höher) Array zu statt dem 2D-Array.


    Code
    1. #include <Array.au3>
    2. Local $aUnterarray[5] = [ 1, 2, 3, 4, 5 ]
    3. Local $aArray[1][2] = [[ $aUnterarray, "Blubb" ]]
    4. _ArrayDisplay($aArray)
    5. Local $aTmp = $aArray[0][0]
    6. _ArrayDisplay($aTmp)

    Was BugFix gesagt hat stimmt nicht:

    Das Pattern muß hinten beginnen zu suchen. Dazu fügst du am Ende des Pattern ein $ an.


    Die RegEx-Engine wird nachwievor den Text von vorne parsen, das $-Zeichen ist lediglich die Markierung für EOL/EOS.

    Du musst nach dem Punkt alles außer einen Punkt matchen, dann klappt das auch:


    Code
    1. MsgBox(0,0,StringRegExpReplace("Install_Paint.NET.au3", "\.[^.]*$", ""))

    Es lag an einem Eintrag in der Datenbank, dieser war zu hoch und dadurch lief das Script nicht in eine If Abfrage und die Variable wurde nicht deklariert.

    Das ist extrem schlechter Codestil den du dir auf jeden Fall abgewöhnen solltest.


    Man greift ausnahmslos niemals auf eine Variable zu wenn sie nicht vorher deklariert wurde, ansonsten hast du am Ende Spaghetticode der bestimmte Skriptabschnitte in bestimmten Reihenfolgen durchlaufen muss,

    damit dein Code korrekt funktioniert.


    Wenn $Button_Start ein GUI-Button ist, solltest du die GUI vorher einmal erzeugen und nach Belieben verstecken/wieder anzeigen. Eine GUI komplett neu zu erzeugen macht nur in wenigen Fällen Sinn.

    Dann hättest du das Problem nicht, und es würde im Skript trotzdem (auch wenn du es deklariert hast) nichts falsch oder anders laufen.

    Wie wäre es wenn du uns den ganzen Code postest statt einem kleinen Ausschnitt der noch nicht mal die Fehlerquelle beinhaltet?

    In dem Abschnitt sehe ich nirgends $Button_Start deklariert, und wenn beim Strippen eine andere Zeile als Fehlermeldung angibt solltest du doch erst recht den gesamten Code posten, weil der Fehler scheinbar eben nicht dort ist wo er zu sein scheint, oder?


    Zumindest ein kleines Skript welches die selben Fehler schmeißt (wenn deins zu groß oder sensible Daten beinhaltet) sollte doch mindestens drin sein.

    Technisch gesehen starten die Programme alle nacheinander, denn du führst ja nicht fünf Threads parallel aus die dann jeweils das Programm starten (auch wenn das je nach Windows-Scheduler auch sequentiell wäre aber ich schweife ab...)


    Jedes dieser Programme erzeugt vermutlich ein Fenster mit einem eindeutig identifizierbaren Titel, warte einfach bis das da ist und starte dann das nächste.

    Geht sicherlich eleganter aber so klappts (es bleiben aber alle Leerzeichen zurück):

    Code
    1. Local $sFileName = "AutoIt Version_745 ein Test.rar"
    2. Local $sZiel1 = StringRegExpReplace($sFileName, "\d+", "")
    3. Local $sZiel2 = StringRegExpReplace($sFileName, "[^\d\s]+\d+", "")
    4. ConsoleWrite($sZiel1 & @CRLF)
    5. ConsoleWrite($sZiel2 & @CRLF)

    Ich kenne das Protokoll nicht, aber du übergibst irgendwo den Pfad zur Exe-Datei. Häng hinten einfach deine CLI-Parameter an.


    Damit du verstehst was ich meine, kompiliere mal das Skript hier und führe es mit der Konsole wie folgt aus:

    Code
    1. myAutoIt.exe param1 param2 "Bla param 3"
    Code
    1. #include <Array.au3>
    2. _ArrayDisplay($CMDLine)