Batch Datei: Eingaben aus C++-Programm tätigen



  • Dieser Beitrag wurde gelöscht!

  • Mod

    Das wird mit reinen Standardmitteln nicht gehen, da betriebssystemabhängig. Aufgrund der .bat und der interaktiven Benutzerführung in Skripten tippe ich mal auf Windows und verschiebe die Frage entsprechend.



  • @SeppJ Ja ist Windows, sorry das hatte ich vergessen zu erwähnen.



  • Ist es nicht etwas widersprüchlich, eine Batchdatei ausführen zu wollen, bei der der Inhalt dem Programm eigentlich genau bekannt sein muss?
    Wenn du die Batchdatei nicht selber lesen und verarbeiten möchtest, würde mir als einfachste Möglichkeit einfallen, feste (eindeutige) Strings innerhalb der Batchdatei zu verwenden, die dann im Programm ersetzt werden.
    Also Batchdatei einlesen, Strings ersetzen, in einer neuen Datei speichern und diese anschließend ausführen.



  • @yahendrik naja, die eingaben die in die batch geschrieben werden sind immer anders da abhängig von nutzereingaben in meinem c++ programm. Dort gibt der nutzer vor start gewisse daten an, die werden dann in der Batch und anderen schritten genutzt.
    Ob das sinnvoll ist oder nicht ist nicht deine aufgabe zu bewerten und glaub mir, wenns anders ginge wrde ichs anders machen und hätte nicht so danach gefragt.
    aber ist ja zum standard geworden in foren raushängen zu lassen dass es doch anders viel besser wäre anstatt entweder konkrete antworten zu geben oder es zu lassen wenn mans nicht weiss.



  • @bla1027 Es war doch überhaupt nicht böse gemeint. Die Frage ist, was geschieht, wenn bspw. nur die Reihenfolge oder die Anzahl an nötigen Eingaben in der Batchdatei geändert wird.
    Daher auch der Vorschlag mit der einfachen Stringersetzung.



  • Was spricht dagegen, dass das batch file die daten via command line argumente übernimmt?
    z.b. <batchfile> <param1> <param2>



  • @bla1027 sagte in Batch Datei: Eingaben aus C++-Programm tätigen:

    Ob das sinnvoll ist oder nicht ist nicht deine aufgabe zu bewerten und glaub mir, wenns anders ginge wrde ichs anders machen und hätte nicht so danach gefragt.
    aber ist ja zum standard geworden in foren raushängen zu lassen dass es doch anders viel besser wäre anstatt entweder konkrete antworten zu geben oder es zu lassen wenn mans nicht weiss.

    Mit solchen Aussagen machst du dir immer viele Freunde und motivierst die Leute enorm zu versuchen dir zu helfen.

    Aber ernsthaft: wenn du nicht mindestens den Inhalt der Batch-Datei rausrückst oder erklärst warum es nicht anders geht, dann hab ich Null Interesse zu versuchen dir zu helfen.

    Es hat nämlich schon einen Grund warum diese Frage kommt. Den verstehst du bloss nicht. Denn würdest du ihn verstehen, würdest du die Leute nicht blöd anpflaumen wenn sie nachfragen. Also... wenn man keinen Plan hat, vielleicht einfach mal höflich bleiben. Du Klotz.


  • Mod

    Der Grund für die Rückfragen ist dieser: XY-Problem. Du hast zu 99% eines.



  • Ich hatte früher irgendwann mal ein Assembler-Programm geschrieben mit dem Namen "instokey", die den übergebenen String in den Tastaturpuffer geschrieben hat.

    Grund war: es gab irgendein Spiel, das beim Starten immer gefragt hat, ob man (1) CGA oder (2) EGA-Grafik haben will (ich wollte natürlich hochauflösendes EGA...), ob man Joystick oder Maus hat, ob man eine Soundkarte hat und wenn ja, welcher irq usw. Und das konnte ich umgehen, indem ich vorher die richtigen Antworten in den Tastaturspeicher geschrieben habe. Der hatte aber ein Limit (so 10 oder 15 Zeichen maximal). Fand ich damals cool. Und hatte ungeheuren "bloß nichts falsch machen"-Effekt, da DOS natürlich gerne abgestürzt ist, wenn man was falsch gemacht hat. Das war mein erstes und einziges reines Assembler-Programm.

    Das wird so mit Windows sicher nicht mehr funktionieren 🙂

    Ich weiß noch, dass das eine .com-Datei war, die ich da erstellt habe. Und sie war irgendwas wie 100 Bytes groß - oder waren es sogar nur 50 Bytes? Erinnere mich nicht mehr so genau.



  • @yahendrik Die batchdatei kann ich nicht ändern..



  • @hustbaer na dann danke für deine hilfe beim lernen. Falls dus noch nicht wusstest: LEute lernen nicht dadurch, dass man ihnen sagt man soll es anders machen, sondern in dem man ihnen erklärt warum es so und so geht. "ja es gibt nen grund, aber ich sag ihn dir nicht. Ich bin nämlich zu schlau für dich und du würdest es nicht verstehen"
    Und das sind 90% der Antworten in foren wie diesen. Somit nur Müll.
    Aber danke, jetzt weiß ich wie klug ihr alle seid.



  • @bla1027 Ist denn die Reihenfolge der Eingaben eindeutig oder musst du auf die Ausgabe der Batch reagieren?

    Die Stichworte die du suchst sind: Umleitung redirect stdin stdout

    Man kann z.B. eine Pipe öffnen (dann aber zu cmd.exe) und die Eingabe raus schreiben.

    Warum kannst du die Batch nicht ändern?



  • @DirkB Die reihenfolge ist eindeutig, ja.
    ISt eine firmeninterne Datei, die soll so wie sie ist verwendet werden am besten..
    Danke, ich lese mich mal in das redirect thema ein, das klingt vielversprechend



  • @bla1027 sagte in Batch Datei: Eingaben aus C++-Programm tätigen:

    ISt eine firmeninterne Datei,

    @bla1027 sagte in Batch Datei: Eingaben aus C++-Programm tätigen:

    Die batchdatei kann ich nicht ändern..

    Diese beiden Aussagen passen nicht zusammen.

    Der Vorschlag von
    @firefly sagte in Batch Datei: Eingaben aus C++-Programm tätigen:

    Was spricht dagegen, dass das batch file die daten via command line argumente übernimmt?
    z.b. <batchfile> <param1> <param2>

    bedeutet ja nicht, das die Batchdatei nur noch mit den Parametern funktioniert.

    Man kann die Batch so schreiben, dass bei fehlenden Parametern nachgefragt wird. Das ist kein Hexenwerk.
    Und einfacher als eine Pipe mit einer Batch



  • @DirkB Das ist exakt das, was ich empfehlen würde. Damit kann das Skript sowohl interaktiv als auch programmgesteuert genutzt werden.



  • @bla1027 sagte in Batch Datei: Eingaben aus C++-Programm tätigen:

    @yahendrik naja, die eingaben die in die batch geschrieben werden sind immer anders da abhängig von nutzereingaben in meinem c++ programm. Dort gibt der nutzer vor start gewisse daten an, die werden dann in der Batch und anderen schritten genutzt.

    Kannst Du nicht die Batchdatei einlesen, die Stellen, an denen etwas abgefragt wird, mit Deinen zu dem Zeitpunkt bekannten Werten versehen, als temporäre Batchdatei unter anderem Namen abspeichern, diese ausführen (lassen) und dann im Anschluss wieder löschen?



  • Du kannst einfach per echound Pipe (|) Eingaben vorgeben, s. Automatically answer to input prompt in windows batch:

    (echo input1 && echo input2) | program.exe

    Das sollte dann auch per system()-Aufruf funktionieren: Using a Single system() Call to Execute Multiple Commands in C.



  • @bla1027
    Das Problem ist dass du keinen Plan hast und gleichzeitig sehr überheblich daherkommst.
    Damit kommst du in Foren natürlich nicht gut an. Dementsprechend auch deine Wahrnehmung dass 90% der Antworten in Foren Müll sind. Andere Leute verhalten sich anders, und oh Wunder, haben dann auch eine andere Erfahrung mit Foren.

    Auf Grund der Art und Weise wie du hier auftrittst ist meine Motivation dir irgendwie zu helfen jetzt halt auch extrem gering.

    Andere sind da anscheinend weniger empfindlich und gerade dabei dir dabei zu helben deine vermutlich unvernünftige Bastellösung umzusetzen. Na dann, viel Spass damit. Lernen wie man Dinge ordentlich macht wirst du dadurch aber nicht. Und Lernen wie man sich benimmt leider auch nicht.



  • @Belli sagte in Batch Datei: Eingaben aus C++-Programm tätigen:

    Kannst Du nicht die Batchdatei einlesen, die Stellen, an denen etwas abgefragt wird, mit Deinen zu dem Zeitpunkt bekannten Werten versehen, als temporäre Batchdatei unter anderem Namen abspeichern, diese ausführen (lassen) und dann im Anschluss wieder löschen?

    Das ist doch auch nur eine Bastellösung - und vermutlich noch anfälliger zu brechen als wenn man den Input rein-piped.

    IMO ist die beste Lösung klar die Batchdatei zu ändern.
    Wenn der OP die Vorgabe hat dass die Batchdatei nicht geändert werden darf, dann ist das natürlich doof. Nur ist es eine Vorgabe die er hinterfragen sollte. Weil sie unvernünftig ist. Genau das wäre die Lektion die er hier hätte lernen können. Unvernünftige Vorgaben gehören immer hinterfragt. So wie wir das hier gemacht haben (wo er dann nen hissy fit bekommen hat). Und genau das sollte er auch machen.

    Wobei ich den Eindruck habe dass diese Vorgabe nichtmal in so absoluter Form existiert. Er schreibt ja

    ISt eine firmeninterne Datei, die soll so wie sie ist verwendet werden am besten..

    (emphasis mine)



  • @hustbaer
    Klar ist das ne Bastellösung. Aber bei den diffusen Vorgaben ein kleiner gemeinsamer Nenner.
    Umleitung von stdin/stdout scheint mir auf den ersten Blick nicht so viel weniger Bastellösung, aber meiner persönlichen Einschätzung nach zu kompliziert für den Threadersteller.


Anmelden zum Antworten