private void BatchBuild()
        {
            if (!Program.BatchBuildList.Any())
            {
                return;
            }

            if (IsBuilding)
            {
                Program.BatchBuildList.Clear();
                return;
            }

            BuildOutput.ResetText();

            BatchBuildSucceedList.Clear();
            BatchBuildFailedList.Clear();
            BatchBuildInvalidList.Clear();
            BatchBuildSkippedList.Clear();

            PreBuild = (s, e) =>
            {
                BuildOutput.ResetText();
                PrintBuildOverview();
            };

            PostBuild += WiiVC_Injector_PostBuild;

            PromptForSucceed = false;
            BatchBuildNext();
        }
        private void BatchBuildNext()
        {
            while (Program.BatchBuildList.Any())
            {
                string game = Program.BatchBuildList[0];

                // Search for second disc
                if (GCRetail.Checked)
                {
                    string[] discs = SearchGCDiscs(game);
                    game = discs[0];
                    if (discs.Length > 1)
                    {
                        OpenGC2.FileName = discs[1];
                        SelectGC2Source(discs[1]);
                    }
                }

                if (SelectGameSource(game, true))
                {
                    if (Directory.Exists(GetOutputFolder()))
                    {
                        AppendBuildOutput(
                            string.Format(
                                Trt.Tr("Title output folder already exists: {0}\nSkipping: {1}.\n"),
                                GetOutputFolder(), game),
                            BuildOutputType.Error);

                        BatchBuildSkippedList.Add(game);
                        Program.BatchBuildList.RemoveAt(0);
                        continue;
                    }
                    else
                    {
                        BatchBuildCurrent();
                        PreBuild = null;
                        break;
                    }
                }

                AppendBuildOutput(
                    string.Format(Trt.Tr("Invalid Title: {0}.\n"), game),
                    BuildOutputType.Error);

                BatchBuildInvalidList.Add(game);
                Program.BatchBuildList.RemoveAt(0);
            }

            if (!Program.BatchBuildList.Any())
            {
                PostBuild -= WiiVC_Injector_PostBuild;

                if (!InClosing)
                {
                    MessageBox.Show(string.Format(
                                        Trt.Tr("All conversions have been completed.\nSucceed: {0}.\nFailed: {1}.\nSkipped: {2}.\nInvalid: {3}."),
                                        BatchBuildSucceedList.Count,
                                        BatchBuildFailedList.Count,
                                        BatchBuildSkippedList.Count,
                                        BatchBuildInvalidList.Count));
                }
            }
        }