0

我希望你能帮助我。当我想执行那些 .bat 文件时,我可以看到这些文件已执行但我只能获得第一个,第二个或其他我无法获得它们的文件,我的批处理文件没有问题,我'已经尝试一一执行它们并且它有效。

 string str_Path = Server.MapPath(".") + "\\execute.bat";
 string str_PathN= Server.MapPath(".") +"\\executeN.bat";
 string str_PathHD = Server.MapPath(".") + "\\executeHD.bat";
 string str_PathFHD = Server.MapPath(".") + "\\executeFHD.bat";

 ProcessStartInfo processInfo = new ProcessStartInfo(str_Path);
 processInfo.UseShellExecute = false;
 Process batchProcess = new Process();
 batchProcess.StartInfo = processInfo;
 batchProcess.Start();
 Thread.Sleep(3000);

 ProcessStartInfo hd = new ProcessStartInfo(str_PathHD);
 hd.UseShellExecute = false;
 Process batchProcessHD = new Process();
 batchProcessHD.StartInfo = processInfo;
 batchProcessHD.Start();
 Thread.Sleep(3000);
 ...
4

3 回答 3

2

你为什么不

public static void runBatch( string path, int sleepTime = 3000 )
{
   ProcessStartInfo psi = new ProcessStartInfo( path );

   psi.UseShellExecute = false;

   Process proc = new Process();
   proc.StartInfo = psi;

   proc.Start();
   Thread.Sleep( sleepTime );
}


main()
{
    runBatch(Server.MapPath(".") + "\\execute.bat");
    runBatch(Server.MapPath(".") +"\\executeN.bat");
...
}

或者更好的 runBatch 版本:

public static void runBatch( string path )
{
   ProcessStartInfo psi = new ProcessStartInfo( path );

   psi.UseShellExecute = false;

   Process proc = new Process();
   proc.StartInfo = psi;

   proc.Start();
   proc.WaitForExit();
}
于 2012-06-26T09:42:27.597 回答
1

您可以使用以下方法简化该代码:

 public void ExecuteBatFiles(List<string> path, int time)
    {
        foreach(string location in path)
        {
            ProcessStartInfo processInfo = new ProcessStartInfo(location);
            processInfo.UseShellExecute = false;
            Process batchProcess = new Process();
            batchProcess.StartInfo = processInfo;
            batchProcess.Start();
            Thread.Sleep(time);
        }
    }

如果你只是想一个接一个地关闭。但它看起来batchProcessHD.StartInfo = processInfo应该被分配hd

于 2012-06-26T09:45:00.347 回答
1

您显然对 C# 很陌生,但对您的困境了解有限,这是另一种方法。

请注意所有答案如何避免为该过程重复相同的设置代码块。

在您复制和粘贴的地方,您遇到了没有进行所有需要的编辑的问题,并且引入了一个需要敏锐的眼睛挑选出来的错误。

程序员努力只编写一次代码,以避免上述问题,因此如果发现该代码有错误并在以后修复,修复一次即可解决整个应用程序的问题。显然,不必一遍又一遍地写同样的东西也节省了时间。

该原理称为 DRY,您可以在此处阅读有关它的更多信息:

http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

    private static void Run()
    {
        var processes = CreateBatchOfProcesses("execute.bat", "executeN.bat", "executeHD.bat", "executeFHD.bat");
        foreach (Process p in processes)
        {
            p.Start();
            p.WaitForExit();

            // Do other stuff with the process.
        }
    }

    private static List<Process> CreateBatchOfProcesses(params string[] paths)
    {
        var batch = new List<Process>(paths.Length);

        foreach (string path in paths)
        {
            string mappedPath = Server.MapPath(String.Concat(".\\", path));
            ProcessStartInfo info = new ProcessStartInfo(mappedPath);
            info.UseShellExecute = false;
            Process process = new Process();
            process.StartInfo = info;

            batch.Add(process);
        }

        return batch;
    }
于 2012-06-26T09:53:35.913 回答