我在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