C#執行外部程式之執行DOS命令和批處理

雲霏霏發表於2014-09-17

在專案開發中,有時候要處理一些檔案,比如視訊格式的轉換,如果用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呼叫其他的很多程式。

 

相關文章