Umgebungsvariablen per AutoIT Skript

  • Hallo an die Runde,

    vielleicht kann ja jemand helfen?
    Wie kann ich es bewerkstelligen, innerhalb eines Skriptes eine oder mehrere Umgebungsvariablen zu setzen, die dann in der gleichen "CMD-Session" verwendet werden können?
    EnvSet ist da ja wohl nicht der richtige Weg, da die gesetzten Variablen mit Beendigung AutoIT im Nirvana verschwinden.
    Eine ähnliche Frage wurde in diesem Forum schon einmal gestellt, ich habe viele Anregungen erhalten, aber ganz löst sie mein Problem nicht.
    Ich habe (meines Wissens nach) alles probiert:

    - Variablen in die Registry geschrieben
    - set und setx
    - zur Laufzeit Batch erstellt, das Umgebungsvariablen setzt etc.

    Ergebnis immer gleich: Umgebungsvariablen sind vorhanden, aber nicht in der betreffenden Kommandozeile. Erst wenn eine neue geöffnet wird.
    EnvUpdate () hat irgendwie auch nichts gebracht.
    Hintergrund ist folgender:
    Aus einem Batchjob heraus soll das AutoIT Script, mit Parametern versehen, eine INI Datei auswerten und je nach dem entsprechende Werte als Umgebungsvariablen setzen, die dann von der Batchdatei weiterverwendet werden sollen. Das Ganze ist Teil einer unbeaufsichtigten Installation.
    Setzt man die Umgebungsvariablen innerhalb des Batchjobs, funktioniert es.

    Hat jemand vielleicht eine Idee? Für einen Tipp wäre ich echt dankbar.

    MfG Heiko

  • Hab mal ne UVariablen UDF geschrieben, die ich aber leider net mehr finde ;(

    Du kannst es auf jeden fall so machen: Autoit Command schreiben:

    set autoit=toll


    zb ;)

    um es auszulesen:


    set

    :)

  • Nunja, das war wohl eine der Standardprozeduren, die ich natürlich als erste ausprobiert habe. Darum ist sie keine, die ich meinte, weiter erwähnen zu müssen, da sie ja wohl selbstverständlich ist?
    Ich habe auch schon so Kombinationen wie:

    set autoit=theHammer
    set autoit=theNumberOne
    set autoit=theOneAndOnly

    versucht, aber immer das gleiche ... in der gleichen Konsole nix UVariable vorhanden.

    Nicht mal sowas krasses wie:

    set SystemVeräppler=huggy

    funktioniert. ... ts ts ts ..

    Also, nach wie vor ist jede ernsthaft gemeinte Lösung herzlich willkommen.

    FF :)

  • Hi,

    ich hoffe ich habe dich einigermaßen richtig verstanden...

    Lass AutoIt mal weg und versuch mal so die .ini auszulesen.

    Spoiler anzeigen


    Bsp.ini

    Code
    [Section]
    UVar=D:\Pfad\Ordner

    Batch.bat

    Code
    for /f "tokens=2 delims==" %%i in ('findstr "UVar=" C:\Bsp.ini') do set MyUVar=%%i


    Ich hoffe es hilft dir ein wenig weiter...


    Gruß
    Greenhorn


  • Hi huggy und Greenhorn,

    Dank nochmalz für die Tipps.
    Die Idee, eine INI aus der Batch auszulesen ist recht interessant, allerdings hätte meine INI Datei mehrere gleiche Zeilen, sprich, das würde so aussehen:

    Spoiler anzeigen
    Code
    [ServerProfil1]
    DrvPackage=aaa.zip
    
    
    [ServerProfil2]
    DrvPackage=aab.zip
    
    
    [ServerProfil3]
    DrvPackage=aac.zip

    So in der Art etwa. Da macht sich das Auslesen der Sektionen natürlich prima.
    Ich habe mir jetzt so geholfen, dass ich nach dem Auswerten der INI Datei alle notwendigen Umgebungsvariablen in eine separate Batchdatei schreibe.

    Spoiler anzeigen
    Code
    set DrvPackage=aaa.zip


    Diese wird dann durch den Haupt-Batch aufgerufen und vóila ... funktioniert.
    Vielleicht nicht die eleganteste Lösung, aber der Zweck heiligt (manchmal) die Mittel.
    set autoit=toll steht dann natürlich auch drin. ;)

    MfG Heiko

  • Hallo!

    hier meine nix.bat

    Spoiler anzeigen

    und hier der Quellcode des ts_test.au3
    alles läuft in einer CMD-shell

    Spoiler anzeigen
    [autoit]

    ;=============================
    ; ts_test.au3
    ; füttert die Umgebungsvariable errorlevel mit
    ; 0 für kein Terminalserver
    ; 1 für Terminalserver

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

    #include <file.au3>

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

    $doit=_queryTermServ()

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

    if $doit=0 then
    exit 0
    Endif
    if $doit=1 then
    exit 1
    Endif

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

    Func _queryTermserv()

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

    ; Kommando query Termserver eigener Name
    ; Return 0 ist kein Termserver
    ; Return 1 ist ein Termserver
    $ts=0
    $myname=@computerName

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

    Dim $StrTempFiles = _TempFile() ; Name für Temp-Datei erzeugen

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

    RunWait(@ComSpec & " /c " & Chr(34) & "query termserver /continue" & Chr(34) & " > " & $StrTempFiles, "", @sw_hide)

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

    ; einlesen in ein Array

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

    Dim $aRecords

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

    If Not _FileReadToArray($StrTempFiles,$aRecords) Then
    ; MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 to $aRecords[0]

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

    ; Msgbox(0,'Record:' & $x, $aRecords[$x],2)

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

    if StringInStr($aRecords[$x],$myname) > 0 then
    $ts=1
    exitloop
    EndIf

    Next

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

    Return $ts
    FileDelete($StrTempFiles)

    EndFunc
    ;===========================================

    [/autoit]

    Viel Spaß damit und ich fleh Dich an:
    mach gleich alles in AUTOIT!!!! das ist einfach Erste Bundesliga, Batch ist und bleibt was für SCHEUNENBADSCHER wie wir Fraggn sagen.

    Grüße

    German

    Edit BugFix: CodeTags

  • ... logen ist AutoIT erste Sahne! Ich habe es ja mehr oder weniger erst vor kurzem so richtig für mich entdeckt und finde es mit jedem Tag goiler.
    Aber in diesem konkreten Fall kann ich auf das Batchgeraffel nicht ganz verzichten, da es Teil eines (gekäuften) unattend Installationsverfahrens ist. Das ganze läuft per BootP-TFTP und in den Skripten werden zur Laufzeit etliche sogenannte VariablenTags gepatcht. Und da will ich mich mal lieber nicht zu weit aus dem Fenster lehnen, wegen Support etc. Man könnte alles in AutoIT umstricken, aber das bezahlt mir ja keiner ...
    Man könnte höchstens ein eigenes Verfahren entwickeln :D

    ... das mit dem errorlevel ist schon interessant, wenn ich das allerdings richtig sehe, kann ich damit pro Skript ja nur einmal die Variable setzen? Ich wollte aber aus der INI Datei gleich mehrere Werte ermitteln und an Variablen übergeben. Mit errorlevel müsst ich dann ja mehrere Skripte schreiben und da könnt ich den Batchkram ja gleich lassen, wie er ist.
    Man, wat bin ich auch wieder anspruchsvoll. :D
    Aber mit der einen Lösung da kann ich leben ...

    Schönen Gruß an die Fraggn :P

  • Klar kannst Du verschiedene Errorlevel abfragen, dann aber nur mit Spagetticode weiterarbeiten

    siehe unten Beispiel mit 99999 (das wären 100.000 Möglichkeiten)

    ==autoit programm test_41.au3====================
    test_41.au3
    #include <string.au3>
    #include <file.au3>
    #include <array.au3>
    #include <GUIConstants.au3>

    $grepstring = InputBox("test_41.au3", "Zahl eingeben." , "", "")
    if StringIsDigit($grepstring) then
    exit $grepstring
    EndIf

    ==================

    ============hier die Batch dazu=======

    test_41.au3

    goto test_41%ERRORLEVEL%

    test_41.au3

    goto test_41%ERRORLEVEL%

    :test_411
    echo eins
    goto ende
    :test_412
    echo zwo
    goto ende
    :test_4199999
    echo der spinnt hier
    :test_413
    echo keinen bock
    goto ende
    :ende
    echo schnauze voll

    =================================


    Scheunenbadscher:

    Scheune= Gebäude meist teilmassiv und Holzständerbauweise für landwirtschaftliche Zwecke errichtet (Lagerhalle, Maschinenhalle)

    Scheunenbadscher=selbsternannter Kfz-Innungsobermeister nach dessen Reparaturkünsten die Karre 5l Öl auf 100km braucht, die Bremsen nicht mehr gehen und die Beifahrertüre nur noch von innen zu öffnen ist und der Lack sieht nach Lackierkabine Modell SAHARA aus.
    (der kann natürlich auch Hubschrauber, U-Boote, Raketenwerfer und Flachbildschirme reparieren!!)


    PS: falls Haku hier Geburtstag hat (hab doch was gesehen):

    ALLES GUTE

  • yepp ... heute Geburtstag. Vielen Dank für das Gute :)

    Scheunenbadscher und Fraggn habe ich auch nur nachgeplappert, ohne zu wissen, was das ist, aber in Vertrauen auf das Gute im Menschen. Ich als Nordlicht hatte da keine Plan.

    Gelle?

    So und nu ne Pulle Whisky in Ballon drehen ... nich lang schnacken, Kopp in Nacken!
    Und morgen wieder AutoIT.

    FF :)