案例说明
之前在做项目的时候有个需求,要在代码内部调用本地的一个批处理(.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
就接收到了参数1
,db_key
就接收到了参数2