exe an cmd/dos

  • Ich versuche mein Problem zu beschreiben:
    1) Eine kleine autoit exe, die einige Operationen durchführt und einen Wert berechnet (eine Kombination aus Zahlen und Buchstaben ohne Leerzeichen)
    2) Diese exe wird aus einem Batch File heraus aufgerufen
    3) Das funktioniert auch.
    4) Ich möchte den in der exe erstellten Wert sofort in dem Batch weiterverarbeiten in dem auch die exe gestartet wurde.
    5) Schön bringe ich das nicht zusammen:

    Wenn ich diesen Wert nehme und als Enviroment Variable ablege steht er in dem aktuellen Batch auf keinen Fall zur Verfügung.
    In eine Datei schreiben und aus dem Batch wieder auslesen --> Funktioniert = wenig prickeld
    Einen Wert in die Reg. schreiben und dort mit regex wieder auslesen geht auch aber schön ist das auch nicht.

    Kann man den Wert nicht direkt aus der EXE an den Batch übergeben?


    Ich hoffe alles verständlich beschrieben zu haben?

    Danke

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Das klingt so als würde es genau das sein was ich suche.
    Leider bin ich heute wohl auf Dau. Ich verstehe Deine Antwort nicht wirklich :rtfm:

    Schaun wir mal:
    Autoit scribt:

    Exit $i

    Batch Datei

    Echo %i% ?
    oder Echo %1%


    Leider kein Rückgabewert?


    Falsch verstanden?


    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • 4) Ich möchte den in der exe erstellten Wert sofort in dem Batch weiterverarbeiten in dem auch die exe gestartet wurde.

    Das kannst du vegessen...

    Das Übergeben von Enviroment-Variablen ist nicht möglich, weil die Exe (AutoIt) und das Batch jeweils mit einer eigenen Kopie des Enviroments hantieren, die sie beim Start mit auf den Weg bekommen haben. Der ReturnCode der Exe liefert lediglich eine Zahl als Ergebnis. Um eine Kombination aus Zahlen und Buchstaben zu übergeben, bleibt dir nur der Weg über eine (temporäre) Datei. Ob die Werte nun in eine Datei oder in der Registry abgelegt werden, macht nicht wirklich einen Unterschied, denn in beiden Fällen ist es ein Dateizugriff. Da mir das auch nicht gefiehl, habe ich im Laufe der Zeit alle meine Batch-Scripte in Rente geschickt und erledige so gut wie alles nur noch mit AutoIt-Scripten, die zum einen viel schneller sind und zum anderen auch mehr Möglichkeiten bieten.

    Edit: @peter, den ReturnCode fragst du im Batch mit ERRORLEVEL ab... und das Ergebnis ist immer eine Zahl...

    Echo %ERRORLEVEL%

    Einmal editiert, zuletzt von Bitnugger (12. Juli 2016 um 14:48)

  • @bignugger. Das mit der enviroment Variable war mir klar - das geht in dem gleichen Fenster nie. Trotzdem Danke.

    Die lösung ist tatsächlich Errorlevel. Dort kommt meine Angabe bis zum ersten Buchstaben (Du schreibst ja - ist stets eine Zahl). Nun kann ich aber meinen Buchstaben auch als Zahl ausdrücken - das hindert mich nicht :)
    Und im Batch wieder in Buchstaben - no Problem.

    Danke Dafür.

    Eigentlich gelößt es sei denn alpines kann mir noch einen anderen Tipp geben? Oder läuft das auf ERRorlevel hinaus?

    @BugFix --> Ja manchmal würde es mehr Spass machen CMD / DOS entsorgen zu können

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Ich hatte wohl doch zu wenig input gegeben.

    Die exe wird vom Batch aufgerufen, macht einige Datumsberechnungen die in Autoit nicht der Rede Wert sind. Diesen Werte möchte ich als Zahl ohne Leerzeichen zurückgeben. Besser noch als String das scheint aber mit Errorlevel nicht zu funktionieren?

    Den verlinkten Beitrag hatte ich leider schon gestern nicht so ganz verstanden :(


    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Leider habe ich mit der Rückgabe ein Problem --- meine "Zahl" hat zu viele Stellen. Da kommt irgendein Quatsch zurück den ich nicht in die Ausgangsziffern zurück bekomme. Ich kann das nachverfolgen bis zu einer Ziffernzahl von 10 funktioniert das - darüber nichtmehr.

    Jemand noch eine Idee (Außer in Text schreiben - oder Reg.

    Danke
    Peter

    @ xorianator Das ist ein Mißverständnis! Die exe ist ein / das Autoit Programm. NAtürlich hast Du recht ginge auch nur mit Autoit. Aber an einigen Stellen wird ein Fremdprogramm aufgerufen, mit "unberechenbarer Laufzeit, da ist es praktischer im bat weiterzumachen...

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • sieht das, was du zurück bekommst immer gleich aus? Sprich bleibt die 9 immer gleich, oder das B oder oder....
    Da du ja nicht mit genauen Beispielen kommst muss halt geraten werden:

    angenommen du willst das hier zurück bekommen: 955bc4 [und noch die Pipe dazu | ]
    durch %ERRORLEVEL% bekommst du das hier: 746363414267

    würde bedeuten dass: 9=74, 5=63, b=41, c=42, 4=6, die Pipe wäre |=7

    IF
    WENN dem so sein sollte, könntest du den Rückgabewert noch in der AutoIt.exe aufsplitten und einen Trenner einbauen, der sonst nicht in der Rückgabe enthalten ist. zB die Pipe (dieser Strich: | ). Dann übergibst du das alles an deine Batch, trennst das dann dort wieder auf indem du so vorgehst wie bei StringSplit() und als Trenner eben das Zeichen für die Pipe. Anschliessend nur noch jedes Zeichen neu zuweisen:

    Then 74=9, 63=5, 41=b, 42=c, 6= 4 und voila, du hast deine Rückgabe.

    Else
    - Mach das Batchfile in AutoIt nach ( <--- würde ich machen)
    - nimm den Umweg über Dateizugriff
    - verfolge andere Lösungsvorschläge
    EndIf

  • Ihr habt ja recht! Ich will wohl mit dem Kopf durch die Wand.
    Lottich. Nein ich wollte niemanden raten lssen - aber da sieht man mal wieder - man glaubt alle Angaben gemacht zu haben.

    Glauben <> Wissen.

    Ich mach das nun mit errorlevel und lasse zwei exe laufen. Damit werden meine Übergabewerte kürzer (weniger Stellen) dann funzt das auch.
    Sonst könnte man den wert ja auch in eine txt schreiben und dort wieder raus holen.

    AnywaY DANKE ERST MAL:
    Ich stelle aber an dieser Stelle mal fest. Rückgabe scheinbar nur mit Errorlevel. Oder über txt und Reg Werte.

    Danke

    Peter

    Ich lasse das nocgh einen Tag offen für "überraschende" Lösungen.

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Nun gebe ich selbst noch eine Antwort: Diese Lösung mag wohl "von hinten durch die Brust" sein:

    Der Weg über das Clipboard. Mit Autoit ins Clipboard schreiben mit sfk176. ins Batch Fenster schreiben. clipput ($i)


    http://de.sourceforge.jp/projects/sfnet…5.1/sfk151.exe/

    und damit in den Batch "sfk151 fromclip".

    Ja schon klar das sind mehr "Fremdprogramme" als cmd. Aber über diesen Weg ist ein nahezu unbegrenzter Datenaustausch zwischen Autoit und CMD bzw cmd und Autoit möglich, skf151 kann auch nach Clipboard.


    Danke für alle Antworten

    Peter

    edit die Version 151 hat einen Bug ausgerechnet in der Clipboard Abfrage (clear) hier der Link zu Version 176

    https://sourceforge.net/projects/swiss…76.exe/download

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    2 Mal editiert, zuletzt von Peter S. Taler (12. Juli 2016 um 18:18)