C# 执行DOS命令和批处理

Posted zhaoshujie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 执行DOS命令和批处理相关的知识,希望对你有一定的参考价值。

在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便。今天就来说一下C#中如何调用外部程序,执行一些特殊任务。

这里演示调用cmd.exe,即我们常用的DOS。

下面来看代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace WinShell
{
   class Program
   {
      static void Main(string[] args)
      {
         Console.WriteLine(Execute("ver",10));
         Console.Read();
      }


      /// <summary>  
      /// 执行DOS命令,返回DOS命令的输出  
      /// </summary>  
      /// <param name="dosCommand">dos命令</param>  
      /// <param name="milliseconds">等待命令执行的时间(单位:毫秒),  
      /// 如果设定为0,则无限等待</param>  
      /// <returns>返回DOS命令的输出</returns>  
      public static string Execute(string command, int seconds)
      {
         string output = ""; //输出字符串  
         if (command != null && !command.Equals(""))
         {
            Process process = new Process();//创建进程对象  
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = "cmd.exe";//设定需要执行的命令  
            startInfo.Arguments = "/C " + command;//“/C”表示执行完命令后马上退出  
            startInfo.UseShellExecute = false;//不使用系统外壳程序启动 
            startInfo.RedirectStandardInput = false;//不重定向输入  
            startInfo.RedirectStandardOutput = true; //重定向输出  
            startInfo.CreateNoWindow = true;//不创建窗口  
            process.StartInfo = startInfo;
            try
            {
               if (process.Start())//开始进程  
               {
                  if (seconds == 0)
                  {
                     process.WaitForExit();//这里无限等待进程结束  
                  }
                  else
                  {
                     process.WaitForExit(seconds); //等待进程结束,等待时间为指定的毫秒  
                  }
                  output = process.StandardOutput.ReadToEnd();//读取进程的输出  
               }
            }
            catch(Exception ex)
            {
               Console.WriteLine(ex.Message);//捕获异常,输出异常信息
            }
            finally
            {
               if (process != null)
                  process.Close();
            }
         }
         return output;
      }  
   }
}

 

这里调用DOS,执行查看版本的命令,然后获取执行结果,输出如下:

技术图片

直接输出结果,一点也不拖泥带水,是不是感觉很好!

下面来说下,如何执行批处理程序,即bat结尾的文件,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace WinShell
{
   class Program
   {
      static void Main(string[] args)
      {
         Process pro = new Process();
         pro.StartInfo.FileName = @"d:\\1.bat";
         pro.StartInfo.UseShellExecute = false;
         pro.StartInfo.RedirectStandardInput = false;
         pro.StartInfo.RedirectStandardOutput = true;
         pro.Start();
         string result = pro.StandardOutput.ReadToEnd();
         Console.WriteLine(result);
    
      }
   }
}

 

这个更加简单,直接把FileName的属性设置为批处理文件,将有Windows调用DOS执行,并且返回结果。

同理,我们可以通过DOS调用其他的很多程序。

以上是关于C# 执行DOS命令和批处理的主要内容,如果未能解决你的问题,请参考以下文章

DOS命令和批处理.BAT理解

是否可以动态编译和执行 C# 代码片段?

怎么用c#打开dos命令或执行bat 关机命令

我做了一个Bat的dos命令批处理,如何在执行一个命令后延迟几秒执行下一个命令

在windows上 定时执行 Schtasks命令详解(计划任务DOS批处理)

bat文件命令大全