如何将参数传递给批处理文件?

时间:2011-02-28 14:06:32

标签: c# .net process

我要求使用像这样的批处理文件运行一组* .sql文件。

private void btn_Execute_Click(object sender, EventArgs e)
{
  try {
    //Creating A batch file to execute the scripts using SQLPLUS....
    FileInfo fi5 = new FileInfo("c:/EMPSCRIPTS/execute.bat");
    StreamWriter sw2 = fi5.CreateText();
    sw2.WriteLine("@Echo Off \r \nsqlplus scotte/tiger@emp @\"c:/EMPSCRIPTS/RUNALL.sql\" \r \nEXIT ");
    sw2.Close();

    System.Diagnostics.Process proc; // Declare New Process
    proc = System.Diagnostics.Process.Start(ConfigurationManager.AppSettings["BatFilePath"].ToString()); // run test.bat from command line.
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.RedirectStandardOutput = true;
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/c" + ConfigurationManager.AppSettings["BatFilePath"].ToString();
    proc.StartInfo.RedirectStandardError = true;
    proc.StartInfo.RedirectStandardInput = true;
    proc.StandardOutput.ReadToEnd();
    proc.WaitForExit();
    proc.Close();
  }
  catch (Exception ex) {
    MessageBox.Show("Insertion Completed");
  }

}

但我想阻止一些文件被不必要地执行。我找到了传递参数的选项。我想静态地给文件提供参数。基于该参数必须执行的用户输入。任何人都可以帮助我吗? 在此先感谢。

2 个答案:

答案 0 :(得分:2)

您正在启动进程后更改StartInfo的值,这对进程没有影响。 See the "Remarks" section here for more information.

创建ProcessStartInfo的新实例,使用您需要的内容进行设置,然后将其传递到the overload of Start,其中包含此类型的实例。

此外,一旦更改了代码,您可以跳过将命令行写入批处理文件。您的executable filenamesqlplusargumentsscotte/tiger@emp @\"c:/EMPSCRIPTS/RUNALL.sql\"

答案 1 :(得分:1)

你误用了Process.Start

您需要创建一个新的ProcessStartInfo对象,设置其所有属性,然后将其传递给Process.Start

正如您的代码所做的那样,修改已在运行的进程的StartInfo无效。