2. Script aus einem Script aufrufen.

  • Hallo zusammen,

    Habe die Suche schon bemüht aber leider nichts gefunden :(

    1. Frage:
    Ich möchte aus einem Script einen 2. Script aufrufen, der 2. Script soll aber mit den Globalen Variablen aus dem 1. Script weiterarbeiten. Wenn der 2. Script abgearbeitet wurde, soll der Rest vom 1. Script abgearbeitet werden. Ist dies irgendwie möglich?

    2. Frage:
    Ich möchte Prüfen, ob ein Kommandozeilenparameter eine Zahl ist oder nicht. So wie ich es mir gedacht habe, funktioniert es aber nicht.

    Code
    For $i = 1 to $CmdLine[0]  
    	Switch $CmdLine[$i]
    		Case StringIsInt($CmdLine[$i])
    			MsgBox(0,'',$CmdLine[$i]&' ist eine Zahl')
    		Case Else
    			MsgBox(0,'',$CmdLine[$i]&' ist keine Zahl')
    	EndSwitch
    Next

    Was mache ich Falsch.

    Währe für jede Hilfe dankbar.

    Gruß Herra

  • Hallo Herra,

    bezüglich der Commandline ist es so, das erstmal alle Parameter als String behandlelt werden. Du mußt also eine Konvertierung durchführen.
    AutoIt hält dafür die Funktionen
    $NumVal = Number(CmdLine[$i])
    oder bei reinen Integerwerten
    $IntVal = Int (CmdLine[$i])
    bereit.

    Wegen des zweiten Skripts, da wird die Sache schon schwieriger. AFAIK gibt es keine Möglichkeit die Variablen über mehrere Scripte hinweg zu deklarieren. Also kommt es darauf an, wieviele Variablen Du brauchst und ob sie im 2. Skript verändert werden müssen.

    Wenn die Werte im 2. Skript nur bekannt sein müssen, kannst Du sie per Commandline übergeben. Wenn es allerdings zu viele oder zu lange Werte sind, klappt das nicht.
    Dann würde ich eine Ini Datei anlegen und die Werte darüber übertragen. Skript 1 schreibt alle Werte in die Ini, ruft Skript 2 auf.
    Das liest dann die Ini ein und arbeitet mit den Werten. Speichert sie vor dem Beenden wieder in die Ini, und Skript 1 liset die Ini aus, bevor es weiterarbeitet.

    Wenn Du das Lesen/Schreiben der Ini je in eine Funktion zusammenfaßt, kannst Du die einfach in beiden Skripten verwenden.

  • Hi TrueMu,

    danke für Deine schnelle Antwort.

    Könntest du die Funktionen $NumVal = Number(CmdLine[$i]) oder bei reinen Integerwerten $IntVal = Int (CmdLine[$i]) etwas genauer erklären, habe leider nichts dazu gefunden. Ein Bespiel würde mir weiterhelfen es zu verstehen.

    Bezüglich meiner 2. Frage. Dann werde ich die Idee vorerst verwerfen und mir was anderes überlegen.

    Danke und Gruß
    Herra

  • aus der hilfe:
    Number:

    Spoiler anzeigen
    [autoit]

    $w = Number(1+2+10) ;returns 13
    $x = Number("3.14") ;returns 3.14
    $y = Number("24/7") ;returns 24
    $z = Number("tmp3") ;returns 0

    [/autoit]

    Int: (Integer = Ganzzahl)

    Spoiler anzeigen
    [autoit]

    $var = Int(10.793) ;$var is the integer 10
    $int = Int("3.1443") ;das ist jetzt von mir: das es auch so geht ;)

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hi Herra,
    vieleicht was für deine 2. Frage...

    Spoiler anzeigen
    [autoit]

    $count = 1
    $text = ""

    [/autoit] [autoit][/autoit] [autoit]

    if $cmdline[0] <> 0 then
    $text = $text & "Es wurden " & $cmdline[0] & " Parameter übergeben." & @CRLF & @CRLF
    Do
    $text = $text & "Dies ist Parameter Nr." & $count & " : " & $cmdline[$count] & @CRLF
    $count = $count + 1
    Until $count > $cmdline[0]
    MsgBox(0, "AutoIt Parameter Beispiel", $text)
    else
    MsgBox(0, "AutoIt Parameter Beispiel", "Es wurden KEINE Parameter übergeben !")
    endif

    [/autoit]

    Das Script mit " scriptname.au3 <Parameter>" aufrufen und los geht es.
    Sollte es.

    MfG
    Der_Doc

    Einmal editiert, zuletzt von Der_Doc (20. Juni 2008 um 16:43)

  • Hi FireFlyer und Doc,

    danke ebenfalls für die Hilfestellung.

    Ich habe es folgendermaßen gelöst. Was haltet Ihr davon?

    [autoit]


    For $i = 1 to $CmdLine[0]
    Select
    Case StringIsInt($CmdLine[$i])
    Global $cl_del = $CmdLine[$i]
    Case $CmdLine[$i] = '-ma' Or $CmdLine[$i] = '-ms' Or $CmdLine[$i] = '-mf'
    Global $cl_mail = $CmdLine[$i]
    EndSelect
    Next

    [/autoit]

    Gruß Herra