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



  • @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.



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

    @hustbaer
    Klar ist das ne Bastellösung. Aber bei den diffusen Vorgaben ein kleiner gemeinsamer Nenner.

    Deswegen denke ich ja auch dass das beste wäre, ihm klarzumachen dass es sinnvoll wäre die Vorgaben zu hinterfragen.

    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.

    Es muss ja nur stdin umgeleitet werden. Und das sollte mit echo blub | blah.bat bzw. evtl. auch type answers.txt | blah.bat relativ einfach gehen.
    Stellen wo Input in einem Batch-File abgefragt wird zu suchen und zu ersetzen kommt mir da deutlich schwieriger vor.



  • @hustbaer ich komm überheblich rüber? mit meiner frage? auf die direkt etwas in die richtung "hast du keine ahnung!?" geantwortet wurde? ok.
    Und naja, wenn ich ahnung hätte wie du meinst dass ich sie nicht habe.. Müsste ich dann fragen?



  • @hustbaer DIe vorgaben sind nunmal so. Da könnt ihr reden wie ihr wollt. deshalb habe ich die frage so gestellt wie ichs getan habe. ich suche hilfe zu der frage und nicht andere möglichkeiten, weil die einfach nicht gesucht sind und fertig. Habt ihr in der schule auch gesagt "ich mach des anders" und euch dann gewundert warum thema verfehlt dransteht?
    Warum fällt es so vielen hier so schwer auf fragen zu antworten ohne zu sagen "eh das ist scheisse wie du das machst".


  • Mod

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

    @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.

    Der wesentliche Unterschied ist, dass das Umschreiben kaputt geht, wenn sich die Interna der Batchdatei ändern. Das ist schlecht, wenn man sich auf interne Details einer fremden Software verlässt, denn ein Entwickler wird nur das externe Interface supporten und stabil halten.

    Bei externer Software wäre die Sache dann auch schon gegessen und man fällt halt auf die Schnauze, wenn man sich auf die Interna fremder Software verlässt. Dem externen Entwickler ist das ja egal, ist deine Schuld. Hier ist es möglicherweise noch schlimmer, wenn Entwickler der Batch und Nutzer der Interna in der selben Firma arbeiten. Jetzt bekommt der Entwickler der Batch einen Anschiss von einem schlechten Chef, dass er dein Programm kaputt gemacht hat. Dadurch lernt er, dass er keine internen Verbesserungen an seiner Batch mehr vornehmen kann, ohne einen zweijährigen Release- und Genehmigungsprozess mit 30 Stakeholdern. Und so geht dann die ganze IT-Abteilung den Bach runter, mit Entwicklungsstillstand und Prozesshölle.


Anmelden zum Antworten