<enter> 使用批处理文件自动执行 DOS 程序的文本输入和密钥时出现意外行为



我在Windows上运行一个旧的DOS程序,它有几个菜单,用户可以通过输入数字来切换(它会自动带你到另一个菜单,不需要按"enter"键)。有时,用户需要输入文件名,然后按enter键。

我正在尝试使用批处理文件自动化用户与此程序的交互。到目前为止,在这个资源的帮助下。我已经成功地通过只需要输入一个数字(不按回车键)的菜单实现了用户交互的自动化。但是,一旦菜单要求输入文件名并按回车键,我就遇到问题了。

下面是自动执行前两个菜单选项(4,然后6)的代码,

(echo 4 
echo 6
) | execute.exe

按6后,下一个菜单需要输入一个文本文件名并按回车键。然而,即使上面的代码(我认为它会在需要输入文件名的交互处停止)也会以某种方式自动按下enter键——这意味着文件没有名称。这就是让我困惑的地方。如果我这样做,结果相同:

(echo 4 
echo 6
echo sometext
) | execute.exe

或:

(echo 4 
echo 6
echo.
) | execute.exe

插入PAUSE也不会改变任何东西。不知何故,批处理文件正在处理需要以特定方式输入文本并按enter键的菜单部分。任何帮助,感谢!

问题

这就是我想象的execute.exe程序是如何解释你给它的输入的。

echo 4
echo 6

转化为

4
6
_

下划线"_"是空白行的占位符。

因此execute.exe等待第一个数字,但是您正在发送echo 4

4
_

所以它接受第一个数字,然后转到下一个数字提示符,忽略空白的回车键,将其视为无效输入,并重新提示输入第二个数字。发送echo 6

6
_

它现在接受第二个提示符的第二个数字,并继续到文件提示符,在那里它立即被空行驳回。

由于程序不期望新的行,因此它们被作为实际命令存储在输入缓冲区中。我的最佳猜测是尝试只输出数字,而不包含由echo命令引起的尾随新行。


对于数字输入试试这样,而不是回显。我自己没有试过,不能说它是否会起作用。您也可以尝试只对6执行此操作,而对4仍然使用echo。

<nul set /p ="4"
<nul set /p ="6"

注意set /p命令不能输出引号"或等号=作为第一个或唯一的字符。更多信息

(
<nul set /p ="4"
<nul set /p ="6"
echo filename
) | execute.exe

最新更新