Пакетный файл Windows для выполнения и связи с работающей программой

503
handle

(Как) можно программно «взаимодействовать» с программой в интерактивном режиме командной строки ( оболочкой ) из CMD.exe через командный файл (.bat)? Пример:

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

Пакетный файл должен начинаться program.exe, отправляться aCommand, затем [опционально] ждать someResponseи так далее.

Есть Как взаимодействовать с программой командной строки, используя командный файл? но не нуждается в автоматическом взаимодействии и поэтому принимает в CALLкачестве ответа.

Может быть, можно запустить процесс отдельно, а затем передать команды и ответы для связи с ним?


В другом месте:

1

1 ответ на вопрос

2
harrymc

Существуют различные механизмы для .batфайлов, хотя они очень ограничены.

Команда установки Microsoft DOS

Синтаксис: SET /P variable=[promptString]

Пример :

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

Синтаксис: CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

Пример :

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

Команда паузы

Синтаксис: pause

Выдает сообщение «Нажмите любую клавишу для продолжения ...» и ждет любой клавиши.

Хотя это не отвечает на мой вопрос, это очень приятно знать! :-) `choice` работает аналогично` set / p`, но устанавливает `errorlevel`. Вот еще одна ссылка CMD: https://ss64.com/nt/choice.html handle 5 лет назад 0
Что бы ответить на ваш вопрос? harrymc 5 лет назад 0
:-) Если бы я знал, не было бы вопроса. handle 5 лет назад 0
Это команды, которые я знаю. Если вы ищете более изощренных, вам нужно написать программу, которая возвращает число в сценарий через уровень ошибки. harrymc 5 лет назад 0
Я ценю ваши усилия, но мы, кажется, не понимаем друг друга. Я добавил к своему вопросу, надеясь прояснить ситуацию. Ваш ответ, по-видимому, не охватывает какое-либо общение с отдельной программой. handle 5 лет назад 0
Мой комментарий выше: вам нужно написать программу, которая запускается пакетным скриптом в фоновом режиме, которая отправит «aCommand» в program.exe, а затем завершит работу. Простым инструментом для этого является [AutoHotKey] (https://autohotkey.com/), где это можно записать в виде сценария из нескольких строк, а затем скомпилировать в exe. harrymc 5 лет назад 0
Извини, я не понимаю. Как может `программа` взаимодействовать с` program.exe`, если она не управляет им как отдельным процессом, и зачем мне вообще нужен пакетный скрипт? (В Python я использовал бы модуль [`subprocess`] (https://docs.python.org/3/library/subprocess.html) для запуска и взаимодействия с` program.exe`.) handle 5 лет назад 0
Эмулируя нажатия клавиш в программе, фактически действуя как клавиатура. harrymc 5 лет назад 0