Variable aus batch an autoit weitergeben

  • Hallo liebe Gemeinde,

    ich habe eiin kleines Problem und hoffen hier Hilfe zu bekommen.
    Ich möchte eine Variable aus eine Batch datei an AutoIt weitergben und AutoiT starten, aber wie bekomme ich das mit der Variable hin ?
    Im mom habe ich das so:

    %_uptime% ist meine Variable, die soll an achtung.exe übergeben werden, hat da einer eine Idee ?

    Einmal editiert, zuletzt von michach (6. Mai 2011 um 09:44)

  • Nicht gut, es soll später auf allen Rechnern ausgeteilt werden, somit sollen es so wenig Dateien wie möglich sein, auch wenn es nur eine Text Datei ist :)
    Aber Danke erstmal, über andere Ideen würde ich mich sehr freuen :)

  • Hi Michach,

    einfach so:

    Und in AutoIt werden die Parameter über $CmdLine ausgelesen.
    $CmdLine[0] gibt die Anzahl der Parameter an die übergeben wurden.

    So sollte es mit einem Parameter aussehen:

    [autoit]

    If $CmdLine[0] > 0 Then

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

    $Parametervariablewieauchimmergenannt = $CmdLine[1]

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

    Else

    [/autoit]

    Gruß

    Prajoss

    "Never touch a running System!"

  • Das klappt ja schonmal super, wie mache ich das mit text dazwichen, so klappt es ja leider nicht:

    Code
    call achtung.exe Es sind schon %_uptime% Tage vergangen.

    Der Text soll zum Anpassen auch in der Batch stehen, da die autoit datei ja eine exe wird.

  • Ansonsten werf die Batch doch komplett weg und mach alles mit AutoIT
    Damit du den Text ändern kannst und andere Sachen einfach eine Ini Datei hinzunehmen.
    Anzahl der Dateien bleibt dann ja gleich :)

    Exe hast du in beiden Fällen und die bat wird durch die Ini ersetzt ;)

    Gruß Dietmar

    Für die Basis hat gtaspider ja schon gesorgt, schön was man hier alles so findet :)
    Habe die Gui etwas vergrößert damit es beim Win7 Theme auch passt.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: gtaspider

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

    Script Function: Uptime Systemstart ermitteln

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

    #ce ----------------------------------------------------------------------------

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

    TraySetState(2)

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

    #include <misc.au3>
    #include <GUIConstants.au3>
    #Include <Constants.au3>
    Opt("TrayMenuMode",1)

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

    $togui = TrayCreateItem("Zu Gui")
    $akttray = TrayCreateItem("Aktualiesieren")
    TrayCreateItem("")
    $exit = TrayCreateItem("Exit")

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

    GUICreate("System UpTime - By GtaSpider", 250, 100, 211, 117)

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

    $akt = GUICtrlCreateButton("&Aktualiesieren", 10, 70, 85, 25, 0)
    $totray = GUICtrlCreateButton("Zu &Tray", 105, 70, 85, 25, 0)
    $time = GUICtrlCreateInput("Error!", 10, 10, 181, 20)
    $timelab = GUICtrlCreateLabel("Error!", 10, 30, 179, 27)
    _GetSysUpTime($time,$timelab)
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $akt
    _GetSysUpTime($time,$timelab)
    Case $totray
    _TrayWhile()
    EndSwitch
    WEnd

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

    Func _TrayWhile()
    TraySetState()
    ;~ TraySetState(16)
    GUISetState(@SW_HIDE)
    While 1
    $msg = TrayGetMsg()
    Switch $msg
    Case $exit
    Exit
    Case $togui
    ExitLoop
    Case $akttray
    _GetSysUpTime($time,$timelab,1345)
    EndSwitch
    WEnd
    TraySetState(2)
    GUISetState()
    EndFunc

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

    Func _GetSysUpTime($Gui_Time,$Gui_Time_Lab,$Tray=0)
    $ret = DllCall("kernel32.dll", "long", "GetTickCount")
    Global $day = 0, $type = "Days", $hour = 0, $min = 0, $sec = 0, $msec = 0, $mtype = "", $stype = "", $mitype = "", $htype = ""

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

    $msec = StringRight("00" & Mod($ret[0], 1000), 3)
    _Iif($msec > 1, $mtype = "s", $mtype = "")
    $mtype = "Milisecond" & $mtype
    $uptime = Floor($ret[0] / 1000)
    $sec = StringRight("00" & Mod($uptime, 60), 2)
    _Iif($sec > 1, $stype = "s", $stype = "")
    $stype = "Second" & $stype
    If $uptime >= 60 Then
    $uptime = Floor($uptime / 60)
    $min = StringRight("00" & Mod($uptime, 60), 2)
    _Iif($min > 1, $mitype = "s", $mitype = "")
    $mitype = "Minute" & $mitype
    $uptime = Floor($uptime / 60)
    $hour = StringRight("00" & Mod($uptime, 24), 2)
    _Iif($hour > 1, $htype = "s", $htype = "")
    $htype = "Hour" & $htype
    If $uptime >= 24 Then; convert hours to days
    $day = Floor($uptime / 24)
    $type = ""
    If $day > 1 Then $type = "s"
    $type = " Day" & $type & " "
    EndIf
    EndIf
    GUICtrlSetData($Gui_Time,$day & " - " & $hour & ":" & $min & ":" & $sec & "." & $msec)
    GUICtrlSetData($Gui_Time_Lab,$type & "-" & $htype & ":" & $mitype & ":" & $stype & "." & $mtype)
    If $Tray <> 0 Then
    TrayTip("System Startzeit",$day & " - " & $hour & ":" & $min & ":" & $sec & "." & $msec,3)
    EndIf
    EndFunc

    [/autoit]

    Dann fällt die Uptime.exe vermutlich auch noch weg, du kannst die weiteren Entscheidungen (0,3,6,9 was das auch bedeutet) ja direkt in dem Script beeinflussen.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    4 Mal editiert, zuletzt von Dietmar (5. Mai 2011 um 19:22)

  • Vielen Dank für die Hilfe, hat sehr gut geklappt :)
    Nur noch eine kleine Frage, wie mache ich das wenn ich von der Variable tage abziehen möchte ?

    Wie kann ich oben von den 9 Tagen die vergangenen Tage am besten abziehen ?

  • Hi michach,

    die interessantere Frage ist immernoch ob du nicht lieber das alles komplett in AutoIt schreibst.

    Gruß

    Prajoss

    "Never touch a running System!"

  • o_O

    wie das halt keinen Sinn ergibt :D

    btt:

    Mein Scripten in der Kommandozeile ist jetzt doch schon gut 3 Jahre her, seit ich AutoIt entdeckt habe.
    Werde dir da nicht so wirklich weiterhelfen können :-/

    "Never touch a running System!"

  • Na schade,
    um flexibler programmieren zu können brauchst Du nur noch einen flexibleren Chef :)

    Komplett in AutoIT wäre es wesensentlich ergonomischer.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o