C#调用bat文件执行命令

时间:2022-09-02 20:33:18
#调用一个垃圾清理软件的.BAT。
这个BAT再运行的时候不是显示删除了什么什么的吗。
我想把这些信息显示再C#的文本框上显示。改如何呢?

====================================
try this

C# code
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "bat文件|*.bat|cmd文件|*.cmd";
if (dlg.ShowDialog() == DialogResult.OK)
{
     StreamReader sr = File.OpenText(dlg.FileName);
     Process p = new Process();
     p.StartInfo.FileName = "cmd.exe";
     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardInput = true;
     p.StartInfo.RedirectStandardOutput = true;
     p.StartInfo.CreateNoWindow = true;
     p.Start();
     while (sr.Peek() != -1)
     {
         string line = sr.ReadLine();
         p.StandardInput.WriteLine(line);
     }
     sr.Close();
     p.StandardInput.WriteLine("exit");
     string response = p.StandardOutput.ReadToEnd();
     string[] strLines = response.Split(new char[] { '\r', '\n' });
     for (int i = 8; i < strLines.Length-6; i++)
     {
         textBox1.AppendText(string.Format("{0}\r\n", strLines[i]));
     }
     p.Close();
}

==============================

如果你执行方法的时间比较长。可以修改为这个

C# code
OpenFileDialog dlg = new OpenFileDialog();
             dlg.Filter = "bat文件|*.bat|cmd文件|*.cmd";
             if (dlg.ShowDialog() == DialogResult.OK)
             {
                 StreamReader sr = File.OpenText(dlg.FileName);
                 Process p = new Process();
                 p.StartInfo.FileName = "cmd.exe";
                 p.StartInfo.UseShellExecute = false;
                 p.StartInfo.RedirectStandardInput = true;
                 p.StartInfo.RedirectStandardOutput = true;
                 p.StartInfo.CreateNoWindow = true;
                 p.Start();
                 while (sr.Peek() != -1)
                 {
                     string line = sr.ReadLine();
                     p.StandardInput.WriteLine(line);
                 }
                 sr.Close();
                 p.StandardInput.WriteLine("exit");
                 p.WaitForExit();
                 string response = p.StandardOutput.ReadToEnd();
                 string[] strLines = response.Split(new char[] { '\r', '\n' });
                 for (int i = 8; i < strLines.Length - 6; i++)
                 {
                     textBox1.AppendText(string.Format("{0}\r\n", strLines[i]));
                 }
                 p.Close();
             }