如何通过 C# 给 BAT 传递参数

通过.Net提供的接口直接调用BAT并传递参数

Posted by SWZ on March 20, 2020

案例说明

之前在做项目的时候有个需求,要在代码内部调用本地的一个批处理(.bat)文件,最原始的做法是这样的。

Application.OpenURL(batPath); 

BAT代码是这样的。(切记,cd /D %~dp0一定要写,否则调用失败)

cd /D %~dp0
echo Hello

后来发现如果能给批处理传递参数,整个功能会更加健硕,然后查阅各种资料发现可以这么写。

改进版

using System.Diagnostics;

Process p = new Process();
//第二个参数为传入的参数,string类型以空格分隔各个参数
ProcessStartInfo pi = new ProcessStartInfo(batPath, "参数1 参数2 ……");
pi.UseShellExecute = false;
pi.RedirectStandardOutput = true;
p.StartInfo = pi;
p.Start();
p.WaitForExit();

批处理脚本内部的%1对应前面C#代码里的参数1,切记一定要写%1而不是什么%hhh之类的,一开始我也以为只是按顺序接收,名字可以随意写,后来测试发现只能%1 %2...这么写。

cd /D %~dp0
set db_name=%1
set db_key=%2
echo Hello

这样db_name就接收到了参数1db_key就接收到了参数2