ASP.NET执行cmd命令

批处理命令,是执行速度最快效益最高的命令。因为批处理命令,说白了,就是ms-dos环境下的命令,有很多的批处理命令,都是纯DOS下的命令。

  然而,批处理命令尽管功能强大,却存在不足之处。批处理命令只能完成基础性的功能,无法完成复杂的网络功能。因此,在很多情况下,程序开发者通常会使用各种开发语言作为开发工具,配合着批处理命令,实现功能强大执行速度较快的项目。

  下面,本站给大家介绍的是,如何在CS结构的C#程序中调用ms-dos窗口运行多条批处理命令

  一、引入命名空间

  首先在CS文件头中,引用如下的代码:

  using System.Diagnostics;

  二、函数代码

  public void MyBatCommand()//名称
{
   //如下的三个字符串,代表三条批处理命令
string MyDosComLine1, MyDosComLine2, MyDosComLine3;

   MyDosComLine1 = "cd\";//返回根目录命令
MyDosComLine2 = "cd MyFiles";//进入MyFiles目录
MyDosComLine3 = "copy *.* e:\";//将当前目录所有文件复制粘贴到E盘

Process myProcess = new Process();
myProcess.StartInfo.FileName = "cmd.exe ";//打开DOS控制平台 
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.CreateNoWindow = true;//是否显示DOS窗口,true代表隐藏;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.Start();
StreamWriter sIn = myProcess.StandardInput;//标准输入流 
sIn.AutoFlush = true;
StreamReader sOut = myProcess.StandardOutput;//标准输入流 
StreamReader sErr = myProcess.StandardError;//标准错误流 

sIn.Write(MyDosComLine1 System.Environment.NewLine);//第一条DOS命令 
sIn.Write(MyDosComLine2 System.Environment.NewLine);//第二条DOS命令 
sIn.Write(MyDosComLine3 System.Environment.NewLine);//第三条DOS命令
sIn.Write("exit" System.Environment.NewLine);//第四条DOS命令,退出DOS窗口

string s = sOut.ReadToEnd();//读取执行DOS命令后输出信息 
string er = sErr.ReadToEnd();//读取执行DOS命令后错误信息 
if (myProcess.HasExited == false)
{
myProcess.Kill();
//MessageBox.Show(er);
}
else
{
//MessageBox.Show(s);
}

sIn.Close();
sOut.Close();
sErr.Close();
myProcess.Close();
}

  部分代码解释:

  想通过c#运行多条批处理命令,我们可以使用如下的格式来添加多条命令。

  sIn.Write(DOS命令代码 System.Environment.NewLine);

  其中,DOS命令代码就是您想执行批处理命令,而System.Environment.NewLine则表明了,在批处理命令之后自动换行。

 

 

例如:

 
 
 

 

public void ExecuteCmd(string cmd)
{
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            //设置自动刷新缓冲并更新
            p.StandardInput.AutoFlush = true;
            //写入命令
            p.StandardInput.WriteLine(cmd);
            p.StandardInput.WriteLine("exit");
            //等待结束
            p.WaitForExit();
            p.Close();
 }

 例如:
  1. //dosCommand Dos命令语句  语句一&&语句二 语句一执行成功才执行二   
  2. public string Execute(string dosCommand)    
  3. {    
  4.     return Execute(dosCommand, 10);    
  5. }    
  6.   
  7.   
  8. /// <summary>     
  9. /// 执行DOS命令,返回DOS命令的输出     
  10. /// </summary>     
  11. /// <param name="dosCommand">dos命令</param>     
  12. /// <param name="milliseconds">等待命令执行的时间(单位:毫秒),     
  13. /// 如果设定为0,则无限等待</param>     
  14. /// <returns>返回DOS命令的输出</returns>     
  15. public static string Execute(string command, int seconds)    
  16. {    
  17.     string output = ""; //输出字符串     
  18.     if (command != null && !command.Equals(""))    
  19.     {    
  20.         Process process = new Process();//创建进程对象     
  21.         ProcessStartInfo startInfo = new ProcessStartInfo();    
  22.         startInfo.FileName = "cmd.exe";//设定需要执行的命令     
  23.         startInfo.Arguments = "/C " + command;//“/C”表示执行完命令后马上退出     
  24.         startInfo.UseShellExecute = false;//不使用系统外壳程序启动     
  25.         startInfo.RedirectStandardInput = false;//不重定向输入     
  26.         startInfo.RedirectStandardOutput = true; //重定向输出     
  27.         startInfo.CreateNoWindow = true;//不创建窗口     
  28.         process.StartInfo = startInfo;    
  29.         try    
  30.         {    
  31.             if (process.Start())//开始进程     
  32.             {    
  33.                 if (seconds == 0)    
  34.                 {    
  35.                     process.WaitForExit();//这里无限等待进程结束     
  36.                 }    
  37.                 else    
  38.                 {    
  39.                     process.WaitForExit(seconds); //等待进程结束,等待时间为指定的毫秒     
  40.                 }    
  41.                 output = process.StandardOutput.ReadToEnd();//读取进程的输出     
  42.             }    
  43.         }    
  44.         catch    
  45.         {    
  46.         }    
  47.         finally    
  48.         {    
  49.             if (process != null)    
  50.                 process.Close();    
  51.         }    
  52.     }    
  53.     return output;    
  54. }  
  55.   using System;

        using System.Collections;

        using System.Configuration;

        using System.Data;

        using System.Linq;

        using System.Web;

        using System.Web.Security;

        using System.Web.UI;

        using System.Web.UI.HtmlControls;

        using System.Web.UI.WebControls;

        using System.Web.UI.WebControls.WebParts;

        using System.Xml.Linq;

        using System.Diagnostics;

        namespace WebForm

        {

        public partial class _Default : System.Web.UI.Page

        {

        protected void Page_Load(object sender, EventArgs e)

        {

        Response.Write(ExeCommand("ping www.126.com"));

        }

        public string ExeCommand(string commandText)

        {

        Process p = new Process();

        p.StartInfo.FileName = "cmd.exe";

        p.StartInfo.UseShellExecute = false;

        p.StartInfo.RedirectStandardInput = true;

        p.StartInfo.RedirectStandardOutput = true;

        p.StartInfo.RedirectStandardError = true;

        p.StartInfo.CreateNoWindow = true;

        string strOutput = null;

        try

        {

        p.Start();

        p.StandardInput.WriteLine(commandText);

        p.StandardInput.WriteLine("exit");

        strOutput = p.StandardOutput.ReadToEnd();

        p.WaitForExit();

        p.Close();

        }

        catch (Exception e)

        {

        strOutput = e.Message;

        }

        return strOutput;

        }

        }

        }

     

       

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。