CMD-Line | Wie soll das ganze funktionieren?

  • Hallo, ich habe gestern Abend ein sehr Interessantes Tutorial gelesen. In dieser ging es um eine "CMD-Line". Hier kurz die erklärung als Zitat dazu:

    Soweit habe ich das ganze ja auch verstanden, aber wie man das ganze in AutoIt verwendet, ist mir immernoch unklar:

    So, ab dem Run komm ich nicht mehr ganz mit. Es soll nun der Parameter "test" übergeben werden. Aber wie kann man dann aus einen anderen script abfragen, was diese Parameter sind?

    Und wo kommt der Array $CmdLine her?


    Der Link zu dem Tutorial gibt es auf Anfrage, da ich nicht wirklich sicher bin ob ich den hier einfach posten kann...

    Danke schon mal im Vorraus ?(

    Einmal editiert, zuletzt von Yjuq (12. August 2012 um 12:23)

  • 1) Die Abfrage in "test.exe" ist (falls das ein AutoIt-Skript ist) wie in den Beispielen oben.
    2) $CmdLine wird von dem AutoIt-Interpreter bereitgestellt, ähnlich wie die ganzen Makros.

    MfG, James

  • Okey, kann mir wer vllt. 2 kleine Script schreiben, damit das ganze veranschaulicht wird. Weil so ganz hab ich das immernoch nicht :/


    1) launcher.au3

    [autoit]

    Run('"' & @ScriptDir & '\test.exe" "test"')

    [/autoit]


    2) test.au3

    [autoit]

    if $CmdLine[0] > 0 then
    For $i=1 to $CmdLine[0]
    If $CmdLine[$i] = 'test' Then MsgBox(0,"Test","CmdLine gefunden!")
    Next
    EndIf

    [/autoit]

    Das funktioniert genau so, wie du schon beschrieben hast. ;)

  • Ah :D Okey, ich hab es jetzt auch mal versucht ^^

    1:

    [autoit]


    Run('"' & @ScriptDir & '\2.exe" "Test"')

    [/autoit]

    2:

    [autoit]


    MsgBox(0, '', $Cmdline[1])

    [/autoit]

    Dankeschön ^^ Jetzt hab ich das ganze kapiert ;P

  • Man sollte an dieser Stelle vielleicht noch anmerken, dass es unter Umständen besser sein kann, wenn man statt '$Cmdline' die ebenfalls durch den Interpreter gesetzte Variable 'CmdLineRaw' verwendet. Denn wenn dieses Script

    [autoit]

    MsgBox(0, '', $Cmdline[1])

    [/autoit]

    beispielsweise ohne Parameter aufgerufen wird, dann wird es einen Fehler produzieren und abstürzen, da dass Array '$CmdLine' nur 1 Element, nämlich das 0te enthalten wird... ;)

    LG
    Christoph :)

  • Deswegen prüft man bei der Auswertung der Parameter ja auch immer zuerst die Größe des Arrays durch $cmdline[0] (oder per ubound, kommt aufs gleiche raus) und spricht die Arrayelemente nur dann an wenn sie existieren, wie das auch wunderbar im Beispiel des ersten Posts gemacht wird. Einen wirklichen Vorteil sehe ich nicht den String $cmdlineraw zur Auswertung zu nutzen.