【问题标题】:How do you enter something at a console prompt programmatically?如何以编程方式在控制台提示符处输入内容?
【发布时间】:2010-03-16 19:21:54
【问题描述】:

我有一个程序,它必须与控制台程序交互,然后我的程序才能继续它正在做的事情。我试图避免我的用户不得不与这个 dos 程序进行交互。因此,我创建了一个 .bat 文件,它完成了我需要做的所有事情,除了最后一步仍然需要我试图避免的用户交互。

具体来说,我输入的命令会在提示符处结束,我需要自动输入y,然后 Enter(对提示说是)然后我想退出。

有什么方法可以让我自动实现这一点,而无需我的用户输入yEnter?理想情况下,我希望在此过程中甚至不弹出控制台窗口。

【问题讨论】:

  • 我不确定我是否了解您到目前为止已经走了多远。你能启动这个提示“y”的命令吗?你是怎么做到的?你用的是什么平台?什么语言? C# 与 .NET?爪哇?
  • y <enter> 不在 bat 文件中,因为?
  • 奥斯汀,你是怎么做到的?只需将“y ”放在 .bat 文件的最后一行?

标签: batch-file


【解决方案1】:

微软的帖子也清楚地说:

不要在“y”和竖线符号(|)之间输入空格

确实,我注意到在我的情况下

回声 y |可执行文件.exe

不起作用 而

回声 y|可执行文件.exe

工作正常

【讨论】:

  • 这更像是评论,而不是对原始问题的回答。
  • 此评论作为答案看起来要好得多(因为答案中允许的格式在 cmets 中是不允许的)。我很高兴他出于这个原因将其作为答案而不是评论。
  • ……虽然这比公认的答案“更正确”……
【解决方案2】:

您可以像这样在程序中输入“y”字符:

echo y | executable.exe

可以像这样输入多行:

(echo y
echo n) | executable.exe

...这将首先通过'y'然后通过'n'。

查看Microsoft here的提示。

【讨论】:

  • 当你像这样管道时,它如何知道何时输入 y?
  • 它没有,它只是坐在缓冲区中,直到程序要求输入
  • 可能能够在 Ctrl+C ascii 字符中回显 - (\x03) - 但我现在正在一个应该中断的 exe 上尝试它,它是不是。另一种方法是在另一个可执行文件中托管/监控您的应用程序。在 .NET 中使用 System.Diagnositics.Proceess 具有此功能 - 查看这篇文章以获取一些基于 VB 的示例 thescarms.com/dotnet/Process.aspx。使用这种方法,您可以监视 StandardOutput,等待提示,输入“y”,然后终止应用程序。
  • 当我尝试一个简单的测试时它工作正常,但是如果我尝试将密码回显到 rsync 提示符(cygwin),它就不起作用。我还没弄清楚为什么。
  • 您必须删除echo y| 之间的空格,以免重复出现这种情况……
【解决方案3】:

我使用了以下内容,因为“echo y | executable.exe”对我不起作用

// Write a "Y" to the process's input
proc.StandardInput.WriteLine("Y");
// Now that we've sent the confirmation "Y" wait for the process to exit
proc.WaitForExit();

在此处发布:https://www.experts-exchange.com/questions/27024185/C-ProcessStart-How-to-automatically-press-the-Y-key.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多