我有一个旧的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的菜单部分。任何帮助赞赏!
答案 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