Windows Batch-Datei zum Ausführen und Kommunizieren mit dem laufenden Programm

914
handle

(Wie) kann ein Programm mit interaktivem Befehlszeilenmodus ( Shell ) programmgesteuert mit CMD.exe über eine Batchdatei (.bat) "interagiert" werden? Beispiel:

>program.exe >>aCommand >>someResponse >>anotherCommand >>someotherResponse >>quit > 

Die Batchdatei sollte starten program.exe, senden aCommand, dann [optional] warten someResponseund so weiter.

Es gibt Wie mit Kommandozeilen - Programm mit dem Batch - Datei zu interagieren? erfordert aber keine automatisierte Interaktion und akzeptiert daher CALLals Antwort.

Möglicherweise ist es möglich, den Prozess separat zu starten und dann Befehle und Antworten weiterzuleiten, um mit ihm zu kommunizieren.


Anderswo:

1

1 Antwort auf die Frage

2
harrymc

Es gibt verschiedene Mechanismen für .batDateien, wenn auch sehr begrenzt.

Microsoft DOS-Set-Befehl

Syntax : SET /P variable=[promptString]

Beispiel:

ECHO 1. Print Hello ECHO 2. Print Bye ECHO 3. Print Test set choice= set /p choice=Type the number to print text. 

Microsoft DOS-Auswahlbefehl

Syntax : CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

Beispiel:

CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel." 

Befehl anhalten

Syntax : pause

Sendet die Meldung "Drücken Sie eine beliebige Taste, um fortzufahren." und wartet auf einen beliebigen Schlüssel.

Obwohl dies meine Frage nicht beantwortet, ist es sehr gut zu wissen! :-) `choice` funktioniert ähnlich wie` set / p`, setzt jedoch `errorlevel`. Hier ist eine weitere CMD-Referenz: https://ss64.com/nt/choice.html handle vor 5 Jahren 0
Was würde deine Frage beantworten? harrymc vor 5 Jahren 0
:-) Wenn ich es wüsste, gäbe es keine Frage. handle vor 5 Jahren 0
Dies sind die Befehle, die ich kenne. Wenn Sie nach mehr Raffinesse suchen, müssen Sie ein Programm schreiben, das über errorlevel eine Nummer an das Skript zurückgibt. harrymc vor 5 Jahren 0
Ich schätze Ihre Bemühungen, aber wir scheinen uns nicht zu verstehen. Ich habe meine Frage ergänzt und hoffte, sie klarer zu machen. Ihre Antwort scheint keine Kommunikation mit einem separaten Programm abzudecken. handle vor 5 Jahren 0
Mein obenstehender Kommentar trifft zu: Sie müssen ein Programm schreiben, das im Hintergrund vom Stapelverarbeitungsskript gestartet wird, das "aCommand" an program.exe sendet und dann beendet wird. Ein einfaches Werkzeug dafür ist [AutoHotKey] (https://autohotkey.com/), wo dies in ein Skript mit wenigen Zeilen geschrieben und dann zum Exe kompiliert werden kann. harrymc vor 5 Jahren 0
Entschuldigung, ich verstehe es nicht. Wie kann ein Programm mit `program.exe` kommunizieren, wenn es nicht als separater Prozess gesteuert wird, und warum sollte ich überhaupt ein Batch-Skript benötigen? (In Python würde ich das Modul [`subprocess`] (https://docs.python.org/3/library/subprocess.html) zum Ausführen und Kommunizieren mit` program.exe` verwenden.) handle vor 5 Jahren 0
Durch Emulation von Tastenanschlägen an das Programm, die eigentlich als Tastatur fungieren. harrymc vor 5 Jahren 0