1

我有一个在 Windows 中运行的旧 DOS 程序,它有几个菜单,用户可以通过输入数字来移动(它会自动将您带到另一个菜单 - 无需按“回车”)。有时,用户需要输入文件名,然后按回车键。

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

这是用于自动化前两个菜单选择(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 的菜单部分。任何帮助表示赞赏!

4

1 回答 1

0

问题

这就是我想象的 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
于 2013-01-21T23:05:19.523 回答