0

以前、誰かが 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);
4

4 に答える 4

1

ここでは、 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);
            }
        }
于 2012-12-11T17:28:44.640 に答える
1

コマンドの最後に「一時停止」を追加します。

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);

またはコンソールの標準出力をストリームにリダイレクトします。

于 2012-12-11T17:07:08.517 に答える
0

もう1つの問題は、を使用していないRedirectStandardOutputため、出力が破棄されることです。この答えを見てください。

于 2012-12-11T17:12:11.107 に答える
0

文字列内にすべてを入れようとする代わりに、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);

また、コマンド ウィンドウが開いていると、コマンドに構文エラーがあるかどうかを確認できます。

于 2012-12-11T17:08:14.753 に答える