自动化文本输入时的意外行为和使用批处理文件</enter>的DOS程序的<enter>键

时间:2013-01-17 17:54:34

标签: batch-file automation dos

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

我正在尝试使用批处理文件自动化用户与此程序的交互。到目前为止,在resource的帮助下。通过仅需要输入数字的菜单(无需按Enter键),我已成功实现用户交互的自动化。但是,一旦菜单需要输入文件名并按Enter键,我就会遇到问题。

以下代码可用于自动执行前两个菜单选项(4,然后是6),

(echo 4 
echo 6
) | execute.exe

按6后,下一个菜单需要输入文本文件名并按Enter键。但是,即使是上面的代码(我认为会停止在我需要输入文件名的交互中)会以某种方式自动按Enter键 - 这意味着该文件没有名称。这让我很困惑。如果我做这样的事情,结果相同:

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

或者这个:

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

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

1 个答案:

答案 0 :(得分:0)

问题

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

echo 4
echo 6

转换为

4
6
_

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

因此,execute.exe会等待第一个号码,但您要发送echo 4

4
_

因此它接受第一个数字,然后进入下一个数字提示,它忽略空白输入按下作为无效输入并重新提示输入第二个数字。发送echo 6

6
_

它现在接受第二个提示的第二个数字,并继续进入文件提示符,并立即被空白行解除。

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


答案

尝试使用数字输入而不是回声。 我自己没有试过这个,也不能说它是否会起作用。你也可以尝试用6来做这个并且仍然使用4的回声。

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

请注意,set /p命令无法输出引用"或等于=符号作为第一个/唯一字符。 More Info

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