Batch Datei: Eingaben aus C++-Programm tätigen
-
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:
Umleitungredirect stdin stdoutMan 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
echo
und 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. auchtype 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".
-
@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.
-
@bla1027 sagte in Batch Datei: Eingaben aus C++-Programm tätigen:
@hustbaer ich komm überheblich rüber? mit meiner frage?
Nein, nicht mit der Frage. Mit deiner Antwort an @yahendrik
auf die direkt etwas in die richtung "hast du keine ahnung!?" geantwortet wurde? ok.
Das mag dir so vorkommen, aber so war es nicht gemeint. Und ich bin auch der Meinung dass @yahendrik das nicht unpassend formuliert hat. Ich denke du hast hier eine bestimmte Erwartungshaltung, also dass Leute in Foren nicht helfen wollen sondern nur schlau daherreden. Und wenn man die Antwort von @yahendrik mit dieser Erwartungshaltung liest, dann wundert es mich nicht dass man da "du hast keine ahnung" reininterpretieren kann. Das ist aber dein Problem/dein Fehler. Nicht der des Forums/von @yahendrik.
Und naja, wenn ich ahnung hätte wie du meinst dass ich sie nicht habe.. Müsste ich dann fragen?
Wenn du dich mit der Sache nicht so gut auskennst, und das auch zugibst... wieso bist du dann so sicher dass unser Nachfragen/in Frage stellen der Vorgaben unvernünftig ist? Das passt nicht zusammen.
-
@hustbaer sagte in Batch Datei: Eingaben aus C++-Programm tätigen:
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.
Es passiert aber auch manchmal, dass vor einer Abfrage erstmal sichergestellt wird, dass nichts mehr in der Eingabe vorhanden ist, d.h. es kann sein, dass aktiv gegen sowas gearbeitet wird.
Daher ist wirklich die beste Lösung, die Batch-Datei zu ändern. Auch wenn @bla1027 das nicht einsehen will.
-
@bla1027 sagte in Batch Datei: Eingaben aus C++-Programm tätigen:
@hustbaer DIe vorgaben sind nunmal so. Da könnt ihr reden wie ihr wollt.
Das glaube ich dir genau dann, wenn du mir glaubwüdrig erklärt hast wieso diese Vorgaben so sind und auch nicht diskutiert bzw. angepasst werden können.
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".Weil es halt scheisse ist wie du das machen willst. Daran ändert sich auch nichts wenn es eine Vorgabe ist. Ich programmiere seit über 20 Jahren. Und eins das ich dabei gelernt habe, ist dass es immer gut ist unvernünftige Vorgaben in Frage zu stellen. Denn die Leute die diese Vorgaben machen wissen oft nicht dass bzw. warum sie unvernünftig sind. Weil diese eben genau so oft vom XY-Problem betroffen sind wie Programmierer wenn sie in Foren Fragen stellen. Und oft stellt sich dann heraus dass die Vorgaben falsch formuliert waren, bzw. man gut damit leben kann sie leicht anzupassen. Wenn nicht, OK, dann halt nicht. Aber versuchen sollte man es immer, denn oft genug erreicht man damit eine Verbesserung. Ist ein Erfahrungswert. Kannst du mir jetzt glauben oder auch nicht.
In der Schule ist das manchmal 'was anderes. Dort gibt es manchmal Vorgaben die unvernünftig klingen, weil bei der Aufgabe etwas bestimmtes gelernt werden soll. Was man nicht lernt wenn man diverse Abkürzungen nimmt - weswegen die dann oft verboten sind. Es kommt aber sogar in Schulen und sogar an Unis oft vor, dass wirklich unvernünftige Vorgaben gemacht werden. Also welche die keinem didaktischen Zweck dienen. Daher macht es auch dort Sinn unsinnig/unvernünftig erscheinende Vorgaben zu hinterfragen.
-
@wob sagte in Batch Datei: Eingaben aus C++-Programm tätigen:
Es passiert aber auch manchmal, dass vor einer Abfrage erstmal sichergestellt wird, dass nichts mehr in der Eingabe vorhanden ist, d.h. es kann sein, dass aktiv gegen sowas gearbeitet wird.
Daher ist wirklich die beste Lösung, die Batch-Datei zu ändern. Auch wenn @bla1027 das nicht einsehen will.Ja. Eh
Aber er weiss das ja alles besser.
Und worum es konkret geht, will er nicht verraten. Weil er das ja alles so gut weiss und so sicher ist dass es keinen anderen Weg (tm) gibt.