代码之家  ›  专栏  ›  技术社区  ›  Daniel Rose

在批处理文件中重定向标准输出和暂停命令

  •  2
  • Daniel Rose  · 技术社区  · 14 年前

    在我的C代码中,我必须运行一些外部进程。这些文件可以是批处理文件或可执行文件。我将输出重定向到我自己的窗口 RedirectStandardOutput ProcessStartInfo 说实话。这允许用户查看输出,即使外部进程已经完成。我还重定向输入,以便用户可以在必要时按键。一般来说,这是非常有效的。

    但是,我有一个问题。一些批处理文件使用 PAUSE 命令。显然,在按键之前,命令不会刷新输出。因此,用户从未看到提示。所以只有在按下一个键之后,用户才会看到他应该按下一个键来继续。有没有办法让这项工作(除了“不要使用暂停”)?

    编辑:批处理文件运行用户的CAM后处理程序,通常由用户(或用户的IT部门)创建。因此,要求更改这些文件或通过创建pause.exe进行“黑客攻击”并不是真正可行的解决方案(除非是最后的解决方案)。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Ohad Schneider    14 年前

    在命令中,尝试

    batchWithPause.bat < nul
    

    在C中,这类似于:

     Process.Start("batchWithPause.bat", "< nul");
    

    编辑 所以你只想让用户看到“按任意键继续”? 然后添加

    @echo "Press any key to continue..."
    

    在每个之前 pause 打电话。您还可以:

    1. 写你自己的pause.bat,基本上就是这样。
    2. 编写一个简单的pause.exe,用c表示:

      公共静态void pause()。 { console.writeline(“按Enter继续”); console.read(); }

    编辑2 我现在明白你的问题了。AsyncOutputDataReceived和streamReader.readline()只会在用户按下某个键后读取Pause的“按任意键继续”。但是,如果您自己循环streamreader.read(),您还将获得“按任意键继续”。所以这似乎是你唯一可能的路线。

    推荐文章