簡體   English   中英

看不到命令​​行的結果

[英]Cannot see the results of command line

以前有人問過如何在Visual Studio中運行C#中的命令行命令,而下面就是答案。
我嘗試了同樣的方法來調用一個名為cccc的工具,它可以在命令行上運行。 但是,當我運行下面的代碼時,我沒有得到任何結果,沒有任何錯誤。
一般說明我們如何從命令行中運行與C#相同的命令並獲得相同的結果。 假設我在命令行上調用一個程序(它可以是能夠在命令行上運行的任何程序,例如cccc,ccm等)並獲得一些結果。 如何調用命令行並提供參數,以便它將調用cccc或其他任何內容並執行與沒有C#時相同的操作。

string strCmdText;
strCmdText = "/C d: cd D:\\Exercises\\npp52\\PowerEditor\\src && dir /s /b | cccc - --outdir=d:\\myfolder";
System.Diagnostics.Process.Start("CMD.exe", strCmdText);

在命令末尾添加“暫停”:

string strCmdText;
strCmdText = "/C d: cd D:\\Exercises\\npp52\\PowerEditor\\src && dir /s /b | cccc - --outdir=d:\\myfolder & pause";
System.Diagnostics.Process.Start("CMD.exe", strCmdText);

或將控制台標准輸出重定向到流。

這里需要更多魔法與OutputDataReceived處理程序

void Main()
{
    System.Diagnostics.Process proc = new System.Diagnostics.Process();                     
                        proc.StartInfo.FileName="cmd.exe";
                        proc.StartInfo.Arguments = "/c ping 127.0.0.1";
                        proc.StartInfo.UseShellExecute = false;
                        proc.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
                        proc.StartInfo.RedirectStandardOutput = true;   
                        proc.Start();                               
                        proc.BeginOutputReadLine();                     
                        proc.WaitForExit();                             
                        proc.Close();
}

private void SortOutputHandler(object sendingProcess, 
            DataReceivedEventArgs outLine)
        {
            if (!String.IsNullOrEmpty(outLine.Data))
            {
             // Do what You need with out
             Console.WriteLine(outLine.Data);
            }
        }

您可以利用ProcessStartInfo類來更好地定義參數,而不是嘗試將所有內容都放在字符串中

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "CMD.EXE";
psi.WorkingDirectory = "D:\\Exercises\\npp52\\PowerEditor\\src ";
psi.Arguments = "/C dir /s /b | cccc - --outdir=d:\\myfolder"";
psi.WindowStyle = ProcessWindowStyle.Normal;
Process.Start(psi);

此外,在命令窗口打開的情況下,您可以查看命令中是否存在語法錯誤

另一個問題是您沒有使用RedirectStandardOutput ,因此丟棄輸出。 看看這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM