2

我有一个交互式命令行程序,我们将其称为 program.exe。当它运行时,我可以输入一堆不同的命令来做不同的事情。我们将它们称为:doA、doB、doC 和 quit。现在,事实证明,我想在 program.exe 中做的第一件事始终是doA。我想节省一些击键并在启动时自动让 program.exe 运行命令 doA。不幸的是,我不能只在命令行上传递“doA”,因为创建 program.exe 的人并没有实现该功能。

在我看来,我有几个选择:

  • 编写另一个调用 program.exe 的程序,将 doA 写入其 stdin,然后将其自己的 stdin 挂接到 program.exe 的 stdin 并将 program.exe 的 sdtout 挂接到其自己的 stdout。这可能会起作用,但我想看看是否有不需要编译器的解决方案

  • 使用一些批处理文件魔法将 doA 塞入 program.exe 的标准输入。这是我有疑问的部分。这是我到目前为止所尝试的:

echo doA | program.exe

这行得通,在那个program.exe执行doA中,但是我不能向program.exe键入任何其他命令。Echo 占用了 program.exe 的标准输入

more | echo doA | program.exe

这也有效,并且更接近我所追求的。program.exe 执行 doA,我看到了 doA 的输出。我也可以输入其他命令,但我看不到这些命令的输出。此外,当我发送退出命令时,program.exe 终止(我猜),但我仍然停留在“更多”命令中,我可以继续输入行,直到我按 ctrl+c。

问题:有没有另一种方法可以做我想要用一个 bat 文件做的事情?从概念上讲,我认为我需要将两个流(键盘和文字“doA”)合并为一个并将其传递给 program.exe,但我可能会走得很远。

4

1 回答 1

2

首先,more | echo doA | program.exe不做你认为它做的事。发送后doA echo不会将这些管道阶段连接在一起,而是会创建完美的接收器 - 这就是您看不到命令​​回显的原因。他们无处可去,也没有被执行program.exe。我认为没有一种简单的方法可以直接从命令行实现您想要的,但可以通过使用小批处理文件轻松解决。创建一个批处理文件,例如args.bat

@echo off 
echo First command
more

现在运行你的程序args|program.exe

于 2012-10-26T15:15:16.317 回答