批处理以将信息传递回控制台应用程序窗口

本文关键字:控制台 应用程序 窗口 信息 批处理 | 更新日期: 2023-09-27 17:56:47

我有一个运行.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)发送数据。

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

我能否以某种方式将这些有用的信息返回到我的控制台应用程序主窗口?

批处理以将信息传递回控制台应用程序窗口

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

请参阅从 .NET 应用程序捕获控制台输出 (C#)


虽然你最好使用一些本机的.NET SFTP/FTP库。

有关 SFTP,请参阅 适用于 .NET 的 SFTP 库

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


如果你想要多合一的解决方案,我可以谦虚地向你推荐我的WinSCP .NET程序集。使用该程序集,您可以对 SFTP、FTP 和 FTPS 使用相同的代码。在内部,程序集实际上运行 WinSCP 控制台应用程序。所以它正在做你试图自己编码的同样的事情。

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

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