我有一个可执行文件,可以从命令行以交互方式运行。这是它的外观:
C:\Users\Me> my_executable.exe # Running the executable from CMD
Welcome! Please choose one:
0: Exit
1: Sub-task 1
2: Sub-task 2
Enter your input: 2 # I entered this interactively
Sub-task 2 chosen.
Please choose next option:
0: Return to previous menu
1: Connect to server
2: Disconnect from server
3: Call server API 1
4: Call server API 2
Enter your input: 1 # I entered this interactively
我无法使用标志预先指定输入参数。例如,这种方法都不起作用:
C:\Users\Me> my_executable.exe 2 # Running the executable from CMD with first argument specified
Sub-task 2 chosen.
Please choose next option:
0: Return to previous menu
1: Connect to server
2: Disconnect from server
3: Call server API 1
4: Call server API 2
Enter your input:
使用批处理文件自动执行此操作的正确方法是什么?我遇到了类似的要求in this SO thread,但是区别在于那里的可执行文件带有命令行参数(与我的情况不同)。
答案 0 :(得分:4)
假定可执行文件读取stdin,并且不直接访问键盘,则可以使用重定向或管道来提供 all 所需的响应,以完成运行
让我们假定您想要指示的2、1响应,但是在服务器连接建立之后,exe会循环回到第一个菜单。假设您要退出,则还需要跟进0。
要使用重定向,您需要准备一个包含所有所需响应的文本文件,每行一个响应。
@echo off
> response.txt (
echo 2
echo 1
echo 0
)
my_executable.exe < response.txt
del response.txt
或者您可能更喜欢使用FOR循环
@echo off
(for %%A in (2 1 0) do echo %%A) > response.txt
my_executable.exe < response.txt
del response.txt
如果使用管道,则可以避免使用临时文件
@echo off
(
echo 2
echo 1
echo 0
) | my_executable
或带有FOR循环
@echo off
(for %%A in (2 1 0) do echo %%A) | my_executable