如何使用 C# 运行批处理文件

问题描述 投票:0回答:1

我需要运行批处理文件,等待它完成并结束进程。 bat 文件启动另一个进程,将数据集中打印到控制台,我需要将所有输出重定向到某个方法而不显示任何窗口。

我尝试了所有选项,但是每次bat文件进程在内部进程完成之前获得退出状态时,如果我使用waitforexit(),那么当内部程序的输出完成时,进程会阻塞并冻结,请帮助 Bat 文件是正确的,它以前可以与 c++ 一起使用。

这是我尝试过的解决方案之一:

class Program
{
  static string batchFilePath = "example.bat";
  static void Main()
  {
    ProcessStartInfo pInfo = new ProcessStartInfo(batchFilePath);
    pInfo.CreateNoWindow = true;
    pInfo.UseShellExecute = false;
    pInfo.RedirectStandardOutput = true;
    pInfo.RedirectStandardError = true;
    using (Process process = new Process())
    { 
      process.StartInfo = pInfo;
      process.OutputDataReceived += (sender, e) =>
      {
        if (e.Data != null)
        {
          Console.WriteLine("Output: " + e.Data);
        }
      };

      process.ErrorDataReceived += (sender, e) =>
      {
        if (e.Data != null)
        {
          Console.WriteLine("Error: " + e.Data);
        }
      };

      process.Start();
      process.BeginOutputReadLine();
      process.BeginErrorReadLine();

      process.WaitForExit();
    }
  }
}
c# batch-file process
1个回答
0
投票
# BATCH FILE

Start ""  "C:\Users\Teodor Mihail\AppData\Local\Programs\Opera GX\launcher.exe"

为了运行批处理文件,必须使用 System.Diagnostics 本机 C# 库。批处理文件将由 CMD 打开,并且批处理文件路径将作为参数传递给它。

using System.Diagnostics;


Process p = new Process();

string batch_file_path = "C:\\Users\\Teodor Mihail\\Desktop\\test.bat";

p.StartInfo.FileName = "cmd"; // <-- EXECUTABLE NAME
p.StartInfo.Arguments = "/k \"" + batch_file_path + "\""; // <-- COMMAND TO BE RUN BY CMD '/k', and the content of the command "PATH" 
p.StartInfo.CreateNoWindow = true; // <-- CREATE NO WINDOW
p.StartInfo.UseShellExecute = false; // <-- USE THE C# APPLICATION AS THE SHELL THROUGH WHICH THE PROCESS IS EXECUTED, NOT THE OS ITSELF
p.Start(); // <-- START THE APPLICATION

p.WaitForExit(5000); // <-- WAIT FOR THE APPLICATION TO EXIT 5 SECONDS (5000 MILLISECONDS)

在您的情况下,您想要等到批处理脚本完成执行,最好的解决方案是测试并查看最佳时间量是多少。除了将应用程序设置为等待一定时间之外,没有确定的方法可以检测脚本何时完成执行。

© www.soinside.com 2019 - 2024. All rights reserved.