是否可以通过一个进程运行多个命令?

时间:2019-08-09 17:59:06

标签: c# cmd process

我有一个使用System.Diagnostics.Process将命令发送到cmd.exe的函数,但是我需要遍历此命令的一组参数,每个循环都打开一个新的cmd.exe,该cmd.exe使用了很多不必要的cpu力量。

当前,我正在使用for循环,该循环递增到列表中的下一个项目以传递给ProcessStartInfo。我需要在自己的行上调用每个参数。 即。 / C myFunction.exe MyList [0] / C myFunction.exe MyList [1] ...等

我目前使用的代码通过myFunction.exe(在cmd.exe中调用),在给定外部for循环的情况下,将MyList中的值设置为0-24。

            Process process = new Process();
            ProcessStartInfo StartInfo = new ProcessStartInfo();
            StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            StartInfo.FileName = "cmd.exe";
            for (int j = 0; j < 25; j++)
            {
                for (int i = 0; i < Device_Numbers.Count; i++)
                {
                    StartInfo.Arguments = "/C myFunction.exe " + i + " = " + j;
                    process.StartInfo = StartInfo;
                    process.Start();
                }
                Thread.Sleep(2000);
            }

对cmd.exe的调用有效,但是它为通过i进行的每次迭代打开了一个新的cmd.exe窗口,如果我可以打开一个窗口并在那个窗口中对所有i进行迭代会更好。

1 个答案:

答案 0 :(得分:0)

第一个using块创建一个包含所有要执行命令的批处理文件。第二个using块执行批处理文件。

using (StreamWriter sw = new StreamWriter("myFunctions.cmd"))
{
    for (int j = 0; j < 25; j++)
    {
        for (int i = 0; i < Device_Numbers.Count; i++)
        {
            sw.WriteLine("myFunction.exe " + i + " = " + j);
        }
    }
}

using (Process process = new Process())
{
    process.StartInfo.FileName = "cmd.exe";
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    process.StartInfo.Arguments = "/C myFunctions.cmd";
    process.Start();
    process.WaitForExit();
}