C#可以通过Process类来执行批处理命令。但是Process类只能执行已知的静态命令。为了执行动态生成的命令,可以使用ProcessStartInfo的属性以及RedirectStandardInput和UseShellExecute方法组合来实现输入指令、执行命令的效果。
下面是两个示例:
示例一:
这个示例展示了如何使用Process类执行一个可操作的批处理命令。
首先,需要创建一个Process实例,并设置StartInfo的FileName属性为“cmd.exe”。 StartInfo的UseShellExecute属性设置为false以便读取Input。
接下来,需要设置StartInfo的RedirectStandardInput属性为true以便可以将命令写入Process流。
最后,使用Process.Start方法启动Process实例后,可以使用GetCurrentProcess调用等待进程结束。
using System.Diagnostics;
class Program
{
static void Main()
{
Process proc = new Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.Start();
proc.StandardInput.WriteLine("echo Hello, world!");
proc.StandardInput.WriteLine("echo Goodbye, world!");
proc.StandardInput.WriteLine("exit");
proc.WaitForExit();
}
}
示例二:
这个示例展示了如何使用Process类执行在运行时生成的动态批处理命令。
首先,需要将属性ProcessStartInfo.RedirectStandardInput和ProcessStartInfo.UseShellExecute设置为true。
接下来,使用cmd.exe /C参数执行Command。使用StreamWriter操作一个进程的StandardInput流,然后使用StreamReader等待进程的退出以获取进程的输出。
using System.Diagnostics;
using System.IO;
class Program
{
static void Main()
{
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
StreamWriter writer = process.StandardInput;
StreamReader reader = process.StandardOutput;
string command = @"echo Hello, world!&echo Goodbye, world!";
writer.Write(@"cmd.exe /C " + command + Environment.NewLine);
writer.Close();
string output = reader.ReadToEnd();
process.WaitForExit();
}
}
需要注意的是,使用动态生成的批处理命令会存在一定的安全隐患,容易被注入攻击利用,建议使用此方法时谨慎处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#动态执行批处理命令的方法 - Python技术站