输入到进程(批处理文件)

时间:2014-04-16 07:02:43

标签: c# batch-file input

我正在尝试在C#Windows窗体应用程序中创建某种应用程序(不是控制台,应用程序页面,配置和控制台作为列表框)。

我的问题是,当我写一些输入(到文本框)时,没有任何反应(我是编码的新手)。

我的代码:

Process process = new Process
            {
                StartInfo =
                {
                    FileName = textBox2.Text,
                    //Arguments = textBox3.Text,
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardInput = true,
                    CreateNoWindow = false,
                }
            };
    server = process;
    process.Start();
    ...

/* LATER */

...
serverInput = process.StandardInput;
...
serverInput.Write(textBoxInput.Text);

更新 - 已解决:代码:

serverInput.WriteLine(...);

1 个答案:

答案 0 :(得分:0)

方法1

这足以运行目录中的批处理文件:

string[] arrBatFiles = Directory.GetFiles(textBox2.Text, "*.bat"); //search at directory path

//loop through all batch files
foreach(string sFile in arrBatFiles)
{
   Process.Start(sFile);
}

方法2

如果您想使用 ProcessStartInfo 成员,请使用以下方法:

public void ExecuteCommand(string sBatchFile, string command)
{
    int ExitCode;
    ProcessStartInfo ProcessInfo;
    Process process;
    string sBatchFilePath = textBox2.Text;  //batch file Path

    ProcessInfo = new ProcessStartInfo(sBatchFile, command);
    ProcessInfo.CreateNoWindow = false;
    ProcessInfo.UseShellExecute = false;
    ProcessInfo.WorkingDirectory = Path.GetDirectoryName(sBatchFile);
    // *** Redirect the output ***
    ProcessInfo.RedirectStandardError = true;
    ProcessInfo.RedirectStandardOutput = true;

    process = Process.Start(ProcessInfo);
    process.WaitForExit();

    // *** Read the streams ***
    string sInput = process.StardardInput.ReadToEnd();
    string sOutput = process.StandardOutput.ReadToEnd();
    string sError = process.StandardError.ReadToEnd();

    ExitCode = process.ExitCode;
}

<强>更新

如果有批处理文件目录,如何调用。

string[] arrBatFiles = Directory.GetFiles(textBox2.Text, "*.bat"); //search at directory path

//loop through all batch files
foreach(string sFile in arrBatFiles)
{
   ExecuteCommand(sFile, string.Empty); //string.Empty refer optional command args
}