在 c# 中将字符串作为批处理文件运行
本文关键字:批处理文件 运行 字符串 | 更新日期: 2023-09-27 18:33:40
我正在编写一个创建批处理文件然后运行的应用程序:
我知道我可以创建一个批处理文件并运行它 没问题.
我想做的是:一旦我创建了制作文件的字符串,有没有办法将字符串作为批处理文件执行?类似的东西
string BatchFile = "echo '"bla bla'" 'n iperf -c 123 ... ... .. "
Diagnostics.Process.Start(BatchFile);
您可以使用 /c 作为可执行文件运行 CMD.EXE,其余部分作为参数:
Process.Start("cmd.exe", "/c echo '"bla bla'" 'n iperf -c 123 ... ... .. ");
对我来说
,我正在使用以下代码:
Process process;
private void button1_Click(object sender, EventArgs e)
{
process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = "cmd";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.Start();
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
process.StandardInput.WriteLine("cd d:/tempo" );
process.StandardInput.WriteLine("dir");
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
string line;
while (!process.StandardOutput.EndOfStream)
{
line = process.StandardOutput.ReadLine();
if (!string.IsNullOrEmpty(line))
{
SetText(line);
}
}
}
delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text += text + Environment.NewLine;
}
}
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
process.StandardInput.WriteLine("exit");
process.Close();
}
您可以将批处理"文件"创建为长字符串,行以 'n
结尾,正如您在示例中所示,然后执行该字符串(我称之为"NotBatch-text")执行 cmd.exe并将此类字符串重定向到其 Stdin 标准句柄。这样,您的"NotBatch-text"可能会使用大量的 Batch 功能,例如扩展 %variables、嵌套在任何级别的IF
和FOR
命令等等。您也可以使用延迟!如果使用/V:ON
开关执行 cmd.exe 则展开。实际上,在 NotBatch 文本中唯一不起作用的是:参数和SHIFT
命令,以及GOTO
/CALL :label
命令;更多细节在这篇文章。
如果你想执行一个更高级的"NotBatch-text"字符串,你甚至可以在第三方程序的帮助下模拟GOTO
和CALL :label
命令,如这篇文章所述。