首页 文章

cmd阅读C#控制台应用程序

提问于
浏览
0

总是有一种方法可以使用C#控制台应用程序来读取CMD输出,就像上面提到的那样并询问这个线程:How to parse command line output from c#?

但是,我需要的是前一个问题的反之亦然,我想创建一个控制台应用程序(无论是在C#中还是在Vb中 - 无关紧要),它将返回一个外部程序(如cmd)可读的输出 . 可执行程序 .

我希望我能做到这么简单:

class Program
{
    static DataTable Main(string[] args)
    {
        // do some stuff
        return myDataTable; //(or String)
    }
}

但没有运气 .

2 回答

  • 1

    由于注释状态读取控制台窗口的内容非常混乱 . 为什么不将控制台输出重定向到文件(如果愿意,还可以将控制台重定向),然后解决方案变得微不足道 .

    This article描述了如何使用自定义跟踪/控制台侦听器/ Logger ,主要是通过扩展TextWriter并设置Console.Out流 .

  • 1

    您是否考虑过使用Windows PowerShell而不是Cmd.exe? PowerShell能够对.NET或COM等对象进行操作,而不像Cmd.exe那样仅限于纯文本 . 因此,您根本不需要担心输出 - 您只需编写类,然后直接从PowerShell使用它们 . 例如,你可以这样做:

    PS C:\WINDOWS\system32> $list = New-Object System.Collections.ArrayList
    
    PS C:\WINDOWS\system32> $list.Add("First item")
    0
    
    PS C:\WINDOWS\system32> $list.Add("Second item") 
    1
    
    PS C:\WINDOWS\system32> $list 
    First item 
    Second item
    
    PS C:\WINDOWS\system32> $list.Count 
    2
    
    PS C:\WINDOWS\system32>
    

    如您所见,可以轻松地创建对象并从PowerShell调用其方法和属性 . 这是PowerShell现在是Microsoft的主要管理界面的原因之一 . 从命令行界面处理对象的能力非常强大,PowerShell非常值得一看 .

    但是,如果这不可能,那么通过简单地写入控制台,您可以使用cmd.exe获得更多功能 .

    在控制台应用程序中,总有三个可用流,称为 stdinstdoutstderr ('standard input','standard output'和'standard error') . stdout 通常连接到显示器, stdin 通常连接到键盘输入,因此默认情况下,控制台应用程序从键盘输入并将输出写入显示器 . 但是,可以将流重定向到文件或从文件重定向,或直接重定向到另一个程序 .

    > 字符将 stdout 重定向到文件 . 从而,

    dir > myfiles.txt
    

    将输出写入myfile.txt而不是显示 .

    同样,输出可以直接“管道”到另一个程序,如:

    dir | more
    

    中间的管道( | )字符将 dirdir 命令直接连接到 more 命令的 stdin ,因此数据直接在两个程序之间流动 . 请注意,dir仍然只是写入控制台,它不一定知道它的输出已被重定向 .

    使用上述技术之一,结合序列化,您可以安排在命令行应用程序之间传递数据 . 您必须安排以两种程序都能理解的格式序列化您的数据,并使用XML或JSON等格式使生活更轻松是明智的,因为它比纯文本更容易反序列化 .

相关问题