Variable an Batchdatei zurückgeben

  • Moin Programmierer.

    Ich habe ein kleines Problem mit einem Script. Ich rufe mit einer logon.cmd eine kleine exe auf, in der verschiedene Variablen aus einer ini-datei ausgelesen und als *.bat abgelegt werden.

    Der Name der Batchdatei ist abhängig von einer ermittelten Variable. Die erstellte Datei heißt z.B. Wxxxx.bat oder Wyyyy.bat. In dem Logon kann ich aber leider nicht "call w????.bat oder call W*.bat aufrufen.

    Jetzt ist meine Frage, wie ich eventuell den Name der Datei aus dem Script (exe) an das Logon zurückgeben kann. ?(

    Ich hoffe, ich habe mich einigermaßen klar ausgdrückt.

    Erfolgreichen Tag wünsch ich Euch.

    Einmal editiert, zuletzt von praep (11. Januar 2010 um 11:26)

  • Hallo,
    Der "Call"-Befehl unterscheidet sich bei Verwendung innerhalb einer Batch Datei und in einem AutoIt-Script.
    Um in einem AutoIt-Script eine externe Batch aufzurufen, verwendet man

    [autoit]

    ShellExecute() oder Run()

    [/autoit]
  • Guten Morgen!


    Meine frage rufst du aus der exe die *.bat auf?

    Ansonsten gibt es in batch verarbeitung den parameter %2 für den namen der laufenden *.bat %1 für den übergebenen Befehl!

    LG Kleiner

  • Was ich nicht verstanden habe, wieso erstellst du eine Batchdatei, anstatt die dortigen Befehle direkt per AutoIt auszuführen?

  • was ich nicht verstehe:

    was willst du überhaupt machen :D

    warum autoit, bat und eine exe verwenden?
    lässt sich bestimmt mit autoit und der exe regeln, wenn nicht sogar mit autoit allein

  • Was ich nicht verstanden habe, wieso erstellst du eine Batchdatei, anstatt die dortigen Befehle direkt per AutoIt auszuführen?

    Weil wir in der Batch-Datei Variablen setzen, die nicht verfügbar waren, wenn ich sie in dem Script direct gesetzt habe:

    Spoiler anzeigen


    RunWait (@ComSpec & " /c set USERID=" & $userdata[1])

    Wenn ich EnvSet() verwende, klappt es scheinbar auch nicht, die Umgebungsvariable ist dann nicht definiert.

    Wenn ich die die erstellte Batchdatei mit dem logon.cmd aufrufe, klappt es.

    Schnitzel

    Zitat

    was ich nicht verstehe:

    was willst du überhaupt machen :D

    warum autoit, bat und eine exe verwenden?
    lässt sich bestimmt mit autoit und der exe regeln, wenn nicht sogar mit autoit allein

    Wir haben einen User, der sich im Citrix anmeldet und dann je nach IP-Adresse eine bestimmte ID braucht, die aus einer ini-datei ausgelesen wird. Die ini les ich mit Autoit ein. Diese Datei wird einmal pro Woche automatisch erzeugt (das ist den Springern und Azubis hier geschuldet) und muss bei jeder Anmeldung gecheckt werden. Autoit (exe) kann ich nicht allein verwenden, da das login.cmd sowieso läuft und wir ein paar Variablen auch erst mit einem anderen Tool aus Citrix heraus ermitteln (IP-Adresse - du bekommst sonst die IP des Citrix-Servers) und an das Autoit-Script übergeben...alles ziemlich verzwickt. :huh:

    Einmal editiert, zuletzt von praep (8. Januar 2010 um 09:55)

  • Sry, habe das Procedere immer noch nicht verstanden :huh:
    WER soll die Wxxxx.BAT denn aufrufen, der User der sich anmeldet? Oder soll diese Datei nacher "automatisch" aufgerufen werden....

  • Hallo praep,

    ich hoffe das ist das was du suchst:

    verstehe allerdings auch nicht, warum du es nicht komplett in AutoIt löst (z,B mit EnvGet, EnvSet etc.)

    mfg (Auto)Bert

  • Ich denke mal weil er die Umgebungsvariablen dauerhaft setzen will und nicht nur für die Zeit der Skriptausführung.

    @praep
    Wenn dem so sein sollte dann lies mal >>Hier<<

    Also ich hab den anderen Post gelesen - das mit der Registry haben wir auch schon probiert - aber bei Abfrage "set USERMID" in der cmd bekommen wir trotzdem den Wert nicht. Er muss für die ganze Zeit gelten, die der User angemeldet ist.

  • Hallo praep,

    ich hoffe das ist das was du suchst:

    Mit dem Returncode hab ich auch experimentiert - das klappt ebenfall nicht, bekomme immer bei "echo %errorlevel%" eine 0.

  • Folgendes funktioniert bei mir wunderbar:

    Spoiler anzeigen
    [autoit]

    _SETENV("Test", "Wert", False)

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

    Func _SETENV($sName, $sValue, $bGlobal = True)
    If $bGlobal Then
    Local $sKey = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
    Else
    Local $sKey = "HKCU\Environment"
    EndIf
    RegWrite($sKey, $sName, "REG_SZ", $sValue)
    EnvUpdate()
    EndFunc

    [/autoit]

    Die folgende Abfrage über die Kommandozeile mit "set Test" ist dann korrekt.
    Natürlich klappt das nur wenn die Kommandozeile ("cmd") erst NACH dem Ausführen des Skriptes geöffnet wird, da die Umgebungsvariablen für Programme beim Start dieser übergeben werden.

  • Danke, werde ich nächste Woche mal antesten. Schönes WE allen Helfern.

  • Ich kapiere nichts mehr^^. Im Startpost war noch die Frage nach dem Starten einer mittels AutoIt-Script erstellten Batchdatei, mittlerweile ist man beim Setzen von Umgebungsvariablen angelangt....

    ICH übergebe von AutoItscripten ermittelte Daten an Umgebungsvariablen so:
    AutoItscript:

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=Beispiel.exe
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    $Variable="HANSIMUELLER"
    consolewrite($variable)

    [/autoit]

    Batch:

    Code
    for /f %i in ('Beispiel.exe') do set meineVar=%i

    Damit wird die letzte Zeile der Ausgabe der Beispiel.EXE dem meineVAR übergeben.
    Alternativ könnte man auch die erste ausgegebene Zeile per

    Code
    Beispiel.exe> datei.txt
    set /p MeineVar= <datei.txt
    ECHO MeineVar lautet: %MeineVar%

    ausgeben.

    Zum Starten der Batchdatei mit einem vom AutoItscript ermittelten Namen also:
    AutoItscript:

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=Beispiel.exe
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    $Variable="HANSIMUELLER.bat" ;batchnamen erstellen
    filewrite($variable,"ECHO off"& @CRLF &"ECHO Hallo, hier ist die "&$variable) ;batch schreiben

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

    consolewrite($variable) ;batchnamen ausgeben

    [/autoit]


    Batch:

    Code
    for /f %i in ('Beispiel.exe') do %i

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (8. Januar 2010 um 16:41)

  • Guten Morgen!


    Ich wolt mein Fehler von gestern noch ersetzen!
    Der name der datei *bat bekommt man mit %0 also eine *bat die gestartet ist kann sich mit dem parameter %0 z.B wieder selber afrufen!
    Andy hat schon ein guten ansatz gemacht!
    Wie ich gerade den ersten post von dir gelesen habe ist mir einsi aufgefallen du schreibst das die *bat erstelt werdeb abhängig von der erstellten "*ini" dar würde mir das gelegen kommen mit autoit die *ini auszulese und zu starten z.B w????? [ Vriable ] in Autoit w??????.bat.

    Beispiel:

    [autoit]

    $Erweiterung = '.bat'

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

    $AuslesenStart = IniReadSection('Pfad','Section')
    For ......
    ;Eventuell prüfung fals nötig mit anderen parametern
    ; Selber starte oder alles an die Logon.cmd o. exe übergeben!
    Run...... $AuslesenStart[..] & $Erweiterung ; oder $AuslesenStart & '.bat' ???
    Run...... ' lobon.cmd o. exe ' & $AuslesenStart[..] & $Erweiterung ; oder $AuslesenStart & '.bat' ???
    ShellExecute...... $AuslesenStart[..] & $Erweiterung ; ???
    Next

    [/autoit]

    Wenn ich das richtig verstanden habe!


    LG Kleiner

  • Danke an Euch alle.

    Mit Andy's Hilfe und consolewrite, siehe Beispiel,

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=Beispiel.exe
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    $Variable="HANSIMUELLER.bat" ;batchnamen erstellen
    filewrite($variable,"ECHO off"& @CRLF &"ECHO Hallo, hier ist die "&$variable) ;batch schreiben

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

    consolewrite($variable) ;batchnamen ausgeben

    [/autoit]

    hat es hingehauen.

    Ich schließe mal das Thema.