将信息传回控制台应用程序的批处理 window

Batch process to pass information back to console application window

我有一个运行 .bat.vbs 文件的控制台应用程序。

启动这些进程的方法如下:

public void runProcess(string aPath,string aName,string aFiletype)
{
  string stInfoFileName;
  string stInfoArgs;

  if(aFiletype == "bat")
  {
    stInfoFileName = (@aPath + @aName);
    stInfoArgs = string.Empty;
  }
  else
  { //vbs
    stInfoFileName = @"cscript";
    stInfoArgs = "//B //Nologo " + aName;
  }

  this.aProcess.StartInfo.FileName = stInfoFileName;
  this.aProcess.StartInfo.Arguments =  stInfoArgs;
  this.aProcess.StartInfo.WorkingDirectory = @aPath;

  this.aProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
  this.aProcess.Start();

  Console.WriteLine("information passed from batch: ???");

  this.aProcess.WaitForExit(); //<-- Optional if you want program running until your script exit
  this.aProcess.Close();
}

它正在启动的当前 .bat 文件用于通过 ftp(ftpftpssftp)发送数据。

当进程为 运行 时,所有信息都显示在进程 windows 中,例如可能会发生错误,文件不会传输,并且在此 "child" 进程 window 中会显示一条详细说明此错误的消息。该过程完成后,"child" window 将与消息一起消失。

我能否以某种方式return将此有用信息发送到我的主控制台应用程序window?

检查进程退出代码 (Process.ExitCode) and/or 捕获控制台输出。

Capturing console output from a .NET application (C#)


尽管您最好使用一些本机 .NET SFTP/FTP 库。

对于 SFTP,参见 SFTP Libraries for .NET

对于 FTP 和 FTPS,可以使用 .NET 框架中的 FtpWebRequest


如果您想要一站式解决方案,我可以虚心向您推荐 my WinSCP .NET assembly。使用程序集,您可以为 SFTP、FTP 和 FTPS 使用相同的代码。在内部,程序集实际运行 WinSCP 控制台应用程序。所以它正在做你自己编写代码的同样事情。

如果将 this.aProcess.StartInfo.UseShellExecute 设置为 false,则子进程应使用现有控制台 window。

对于批处理文件,此更改还意味着您需要显式调用 cmd /c 到 运行 它们,其方式与您当前调用 cscript /B 到 运行.vbs 脚本。